From 4e61f0da1bb9fdfa93468a537262a4678ab128c5 Mon Sep 17 00:00:00 2001 From: Prateek Srivastava Date: Mon, 11 Jul 2016 15:23:09 -0600 Subject: [PATCH 1/5] Fix rebase (#577) * Fix static analyzer warnings. Brings back https://github.com/segmentio/analytics-ios/commit/bad7259ed649f48629fda5373c0f4100b52537ed * Friendly assert messages. Brings back https://github.com/segmentio/analytics-ios/commit/0125804698f5e7087ca49f79f4ad99cc78aa2437 * Dont send Segment.io: false in integrations dictionary. Brings back https://github.com/segmentio/analytics-ios/commit/1ddcf615942125ecf791a8001794a27f7cb0385c * Bring back UIViewController+SEGScreen improvements. https://github.com/segmentio/analytics-ios/commit/66fdd8c25fbd28311cc99c0d6ccf8884e065d8b3 https://github.com/segmentio/analytics-ios/commit/3ac7115dde4fe0fc97fde61ac548111ddf76f694 * Record entire context for every event. Brings back 98a4672 * Add anonymousID retrieval method https://github.com/segmentio/analytics-ios/commit/b8aed9692e82ad1dbbecfae0ad5fc353a9eb2220 * update travis config * use pretty targets --- .../Classes/Internal/SEGAnalyticsUtils.h | 1 + .../Classes/Internal/SEGAnalyticsUtils.m | 8 ++ Analytics/Classes/Internal/SEGReachability.m | 3 + .../Classes/Internal/SEGSegmentIntegration.h | 1 - .../Classes/Internal/SEGSegmentIntegration.m | 90 +++------------ .../Internal/UIViewController+SEGScreen.m | 16 +-- Analytics/Classes/SEGAnalytics.h | 67 ++++++------ Analytics/Classes/SEGAnalytics.m | 103 ++++++++++++++++-- 8 files changed, 163 insertions(+), 126 deletions(-) diff --git a/Analytics/Classes/Internal/SEGAnalyticsUtils.h b/Analytics/Classes/Internal/SEGAnalyticsUtils.h index 9bb1a125b..e7d2dd740 100644 --- a/Analytics/Classes/Internal/SEGAnalyticsUtils.h +++ b/Analytics/Classes/Internal/SEGAnalyticsUtils.h @@ -1,6 +1,7 @@ #import NSURL *SEGAnalyticsURLForFilename(NSString *filename); +NSString *GenerateUUIDString(); // Date Utils NSString *iso8601FormattedString(NSDate *date); diff --git a/Analytics/Classes/Internal/SEGAnalyticsUtils.m b/Analytics/Classes/Internal/SEGAnalyticsUtils.m index bd3b7d3b9..1ed5168cc 100644 --- a/Analytics/Classes/Internal/SEGAnalyticsUtils.m +++ b/Analytics/Classes/Internal/SEGAnalyticsUtils.m @@ -21,6 +21,14 @@ return [[NSURL alloc] initFileURLWithPath:[supportPath stringByAppendingPathComponent:filename]]; } +NSString *GenerateUUIDString() +{ + CFUUIDRef theUUID = CFUUIDCreate(NULL); + NSString *UUIDString = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, theUUID); + CFRelease(theUUID); + return UUIDString; +} + // Date Utils NSString *iso8601FormattedString(NSDate *date) { diff --git a/Analytics/Classes/Internal/SEGReachability.m b/Analytics/Classes/Internal/SEGReachability.m index 2b79689bc..57c7d43be 100644 --- a/Analytics/Classes/Internal/SEGReachability.m +++ b/Analytics/Classes/Internal/SEGReachability.m @@ -113,6 +113,7 @@ + (SEGReachability *)reachabilityWithHostname:(NSString *)hostname SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithName(NULL, [hostname UTF8String]); if (ref) { id reachability = [[self alloc] initWithReachabilityRef:ref]; + CFRelease(ref); #if __has_feature(objc_arc) return reachability; @@ -129,6 +130,7 @@ + (SEGReachability *)reachabilityWithAddress:(const struct sockaddr_in *)hostAdd SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)hostAddress); if (ref) { id reachability = [[self alloc] initWithReachabilityRef:ref]; + CFRelease(ref); #if __has_feature(objc_arc) return reachability; @@ -171,6 +173,7 @@ - (SEGReachability *)initWithReachabilityRef:(SCNetworkReachabilityRef)ref if (self != nil) { self.reachableOnWWAN = YES; self.reachabilityRef = ref; + CFRetain(self.reachabilityRef); } return self; diff --git a/Analytics/Classes/Internal/SEGSegmentIntegration.h b/Analytics/Classes/Internal/SEGSegmentIntegration.h index f234b0315..0cceb3a4b 100644 --- a/Analytics/Classes/Internal/SEGSegmentIntegration.h +++ b/Analytics/Classes/Internal/SEGSegmentIntegration.h @@ -8,7 +8,6 @@ extern NSString *const SEGSegmentRequestDidFailNotification; @interface SEGSegmentIntegration : NSObject -@property (nonatomic, copy) NSString *anonymousId; @property (nonatomic, copy) NSString *userId; @property (nonatomic, strong) NSURL *apiURL; diff --git a/Analytics/Classes/Internal/SEGSegmentIntegration.m b/Analytics/Classes/Internal/SEGSegmentIntegration.m index b39a0133f..4eee5d234 100644 --- a/Analytics/Classes/Internal/SEGSegmentIntegration.m +++ b/Analytics/Classes/Internal/SEGSegmentIntegration.m @@ -23,18 +23,9 @@ NSString *const SEGADClientClass = @"ADClient"; NSString *const SEGUserIdKey = @"SEGUserId"; -NSString *const SEGAnonymousIdKey = @"SEGAnonymousId"; NSString *const SEGQueueKey = @"SEGQueue"; NSString *const SEGTraitsKey = @"SEGTraits"; -static NSString *GenerateUUIDString() -{ - CFUUIDRef theUUID = CFUUIDCreate(NULL); - NSString *UUIDString = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, theUUID); - CFRelease(theUUID); - return UUIDString; -} - static NSString *GetDeviceModel() { size_t size; @@ -60,7 +51,7 @@ static BOOL GetAdTrackingEnabled() @interface SEGSegmentIntegration () @property (nonatomic, strong) NSMutableArray *queue; -@property (nonatomic, strong) NSDictionary *context; +@property (nonatomic, strong) NSDictionary *cachedStaticContext; @property (nonatomic, strong) NSArray *batch; @property (nonatomic, strong) SEGAnalyticsRequest *request; @property (nonatomic, assign) UIBackgroundTaskIdentifier flushTaskID; @@ -84,12 +75,11 @@ - (id)initWithAnalytics:(SEGAnalytics *)analytics if (self = [super init]) { self.configuration = [analytics configuration]; self.apiURL = [NSURL URLWithString:@"https://api.segment.io/v1/import"]; - self.anonymousId = [self getAnonymousId:NO]; self.userId = [self getUserId]; self.bluetooth = [[SEGBluetooth alloc] init]; self.reachability = [SEGReachability reachabilityWithHostname:@"google.com"]; [self.reachability startNotifier]; - self.context = [self staticContext]; + self.cachedStaticContext = [self staticContext]; self.serialQueue = seg_dispatch_queue_create_specific("io.segment.analytics.segmentio", DISPATCH_QUEUE_SERIAL); self.flushTaskID = UIBackgroundTaskInvalid; self.analytics = analytics; @@ -105,9 +95,7 @@ - (id)initWithAnalytics:(SEGAnalytics *)analytics } }]; - [self addSkipBackupAttributeToItemAtPath:self.userIDURL]; - [self addSkipBackupAttributeToItemAtPath:self.anonymousIDURL]; [self addSkipBackupAttributeToItemAtPath:self.traitsURL]; [self addSkipBackupAttributeToItemAtPath:self.queueURL]; #endif @@ -217,9 +205,6 @@ - (NSDictionary *)staticContext - (NSDictionary *)liveContext { NSMutableDictionary *context = [[NSMutableDictionary alloc] init]; - - [context addEntriesFromDictionary:self.context]; - context[@"locale"] = [NSString stringWithFormat: @"%@-%@", [NSLocale.currentLocale objectForKey:NSLocaleLanguageCode], @@ -313,18 +298,6 @@ - (void)saveUserId:(NSString *)userId }]; } -- (void)saveAnonymousId:(NSString *)anonymousId -{ - [self dispatchBackground:^{ - self.anonymousId = anonymousId; -#if TARGET_OS_TV - [[NSUserDefaults standardUserDefaults] setValue:anonymousId forKey:SEGAnonymousIdKey]; -#else - [self.anonymousId writeToURL:self.anonymousIDURL atomically:YES encoding:NSUTF8StringEncoding error:NULL]; -#endif - }]; -} - - (void)addTraits:(NSDictionary *)traits { [self dispatchBackground:^{ @@ -345,9 +318,6 @@ - (void)identify:(SEGIdentifyPayload *)payload [self dispatchBackground:^{ [self saveUserId:payload.userId]; [self addTraits:payload.traits]; - if (payload.anonymousId) { - [self saveAnonymousId:payload.anonymousId]; - } }]; NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; @@ -388,7 +358,7 @@ - (void)alias:(SEGAliasPayload *)payload { NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; [dictionary setValue:payload.theNewId forKey:@"userId"]; - [dictionary setValue:self.userId ?: self.anonymousId forKey:@"previousId"]; + [dictionary setValue:self.userId ?: [self.analytics getAnonymousId] forKey:@"previousId"]; [self enqueueAction:@"alias" dictionary:dictionary context:payload.context integrations:payload.integrations]; } @@ -405,7 +375,7 @@ - (void)registeredForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken for (NSUInteger i = 0; i < deviceToken.length; i++) { [token appendString:[NSString stringWithFormat:@"%02lx", (unsigned long)buffer[i]]]; } - [self.context[@"device"] setObject:[token copy] forKey:@"token"]; + [self.cachedStaticContext[@"device"] setObject:[token copy] forKey:@"token"]; } - (void)continueUserActivity:(NSUserActivity *)activity @@ -426,10 +396,15 @@ - (void)openURL:(NSURL *)url options:(NSDictionary *)options #pragma mark - Queueing +// Merges user provided integration options with bundled integrations. - (NSDictionary *)integrationsDictionary:(NSDictionary *)integrations { NSMutableDictionary *dict = [integrations ?: @{} mutableCopy]; for (NSString *integration in self.analytics.bundledIntegrations) { + // Don't record Segment.io in the dictionary. It is always enabled. + if ([integration isEqualToString:@"Segment.io"]) { + continue; + } dict[integration] = @NO; } return [dict copy]; @@ -451,15 +426,17 @@ - (void)enqueueAction:(NSString *)action dictionary:(NSMutableDictionary *)paylo if (![action isEqualToString:@"alias"]) { [payload setValue:self.userId forKey:@"userId"]; } - [payload setValue:self.anonymousId forKey:@"anonymousId"]; + [payload setValue:[self.analytics getAnonymousId] forKey:@"anonymousId"]; [payload setValue:[self integrationsDictionary:integrations] forKey:@"integrations"]; - NSDictionary *defaultContext = [self liveContext]; + NSDictionary *staticContext = self.cachedStaticContext; + NSDictionary *liveContext = [self liveContext]; NSDictionary *customContext = context; - NSMutableDictionary *context = [NSMutableDictionary dictionaryWithCapacity:customContext.count + defaultContext.count]; - [context addEntriesFromDictionary:defaultContext]; - [context addEntriesFromDictionary:customContext]; // let the custom context override ours + NSMutableDictionary *context = [NSMutableDictionary dictionaryWithCapacity:staticContext.count + liveContext.count + customContext.count]; + [context addEntriesFromDictionary:staticContext]; + [context addEntriesFromDictionary:liveContext]; + [context addEntriesFromDictionary:customContext]; [payload setValue:[context copy] forKey:@"context"]; SEGLog(@"%@ Enqueueing action: %@", self, payload); @@ -508,7 +485,6 @@ - (void)flushWithMaxSize:(NSUInteger)maxBatchSize NSMutableDictionary *payloadDictionary = [[NSMutableDictionary alloc] init]; [payloadDictionary setObject:self.configuration.writeKey forKey:@"writeKey"]; [payloadDictionary setObject:iso8601FormattedString([NSDate date]) forKey:@"sentAt"]; - [payloadDictionary setObject:self.context forKey:@"context"]; [payloadDictionary setObject:self.batch forKey:@"batch"]; SEGLog(@"Flushing payload %@", payloadDictionary); @@ -545,7 +521,6 @@ - (void)reset { [self dispatchBackgroundAndWait:^{ [[NSUserDefaults standardUserDefaults] setValue:nil forKey:SEGUserIdKey]; - [[NSUserDefaults standardUserDefaults] setValue:nil forKey:SEGAnonymousIdKey]; #if TARGET_OS_TV [[NSUserDefaults standardUserDefaults] setValue:@[] forKey:SEGQueueKey]; @@ -559,7 +534,6 @@ - (void)reset self.userId = nil; self.traits = [NSMutableDictionary dictionary]; self.queue = [NSMutableArray array]; - self.anonymousId = [self getAnonymousId:YES]; self.request.completion = nil; self.request = nil; }]; @@ -676,11 +650,6 @@ - (NSURL *)userIDURL return SEGAnalyticsURLForFilename(@"segmentio.userId"); } -- (NSURL *)anonymousIDURL -{ - return SEGAnalyticsURLForFilename(@"segment.anonymousId"); -} - - (NSURL *)queueURL { return SEGAnalyticsURLForFilename(@"segmentio.queue.plist"); @@ -691,33 +660,6 @@ - (NSURL *)traitsURL return SEGAnalyticsURLForFilename(@"segmentio.traits.plist"); } -- (NSString *)getAnonymousId:(BOOL)reset -{ -#if TARGET_OS_TV - NSString *anonymousId = [[NSUserDefaults standardUserDefaults] valueForKey:SEGAnonymousIdKey]; -#else - NSURL *url = self.anonymousIDURL; - NSString *anonymousId = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:NULL]; -#endif - - // We've chosen to generate a UUID rather than use the UDID (deprecated in iOS 5), - // identifierForVendor (iOS6 and later, can't be changed on logout), - // or MAC address (blocked in iOS 7). For more info see https://segment.io/libraries/ios#ids - - if (!anonymousId || reset) { - anonymousId = GenerateUUIDString(); - SEGLog(@"New anonymousId: %@", anonymousId); - -#if TARGET_OS_TV - [[NSUserDefaults standardUserDefaults] setObject:anonymousId forKey:SEGAnonymousIdKey]; -#else - [anonymousId writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:NULL]; -#endif - } - - return anonymousId; -} - - (NSString *)getUserId { return [[NSUserDefaults standardUserDefaults] valueForKey:SEGUserIdKey] ?: [[NSString alloc] initWithContentsOfURL:self.userIDURL encoding:NSUTF8StringEncoding error:NULL]; diff --git a/Analytics/Classes/Internal/UIViewController+SEGScreen.m b/Analytics/Classes/Internal/UIViewController+SEGScreen.m index 5a935e824..bf4646c4e 100644 --- a/Analytics/Classes/Internal/UIViewController+SEGScreen.m +++ b/Analytics/Classes/Internal/UIViewController+SEGScreen.m @@ -44,29 +44,29 @@ + (UIViewController *)seg_topViewController + (UIViewController *)seg_topViewController:(UIViewController *)rootViewController { - if (rootViewController.presentedViewController == nil) { - return rootViewController; + UIViewController *presentedViewController = rootViewController.presentedViewController; + if (presentedViewController != nil) { + return [self seg_topViewController:presentedViewController]; } - if ([rootViewController.presentedViewController isKindOfClass:[UINavigationController class]]) { - UINavigationController *navigationController = (UINavigationController *)rootViewController.presentedViewController; - UIViewController *lastViewController = [[navigationController viewControllers] lastObject]; + if ([rootViewController isKindOfClass:[UINavigationController class]]) { + UIViewController *lastViewController = [[(UINavigationController *)rootViewController viewControllers] lastObject]; return [self seg_topViewController:lastViewController]; } - UIViewController *presentedViewController = (UIViewController *)rootViewController.presentedViewController; - return [self seg_topViewController:presentedViewController]; + return rootViewController; } - (void)seg_viewDidAppear:(BOOL)animated { UIViewController *top = [UIViewController seg_topViewController]; if (!top) { + SEGLog(@"Could not infer screen."); return; } NSString *name = [top title]; - if (name.length == 0) { + if (!name) { name = [[[top class] description] stringByReplacingOccurrencesOfString:@"ViewController" withString:@""]; // Class name could be just "ViewController". if (name.length == 0) { diff --git a/Analytics/Classes/SEGAnalytics.h b/Analytics/Classes/SEGAnalytics.h index 388b4cf2d..c28590d1b 100644 --- a/Analytics/Classes/SEGAnalytics.h +++ b/Analytics/Classes/SEGAnalytics.h @@ -120,21 +120,21 @@ extern NSString *SEGAnalyticsIntegrationDidStart; /*! @method - + @abstract Associate a user with their unique ID and record traits about them. - + @param userId A database ID (or email address) for this user. If you don't have a userId but want to record traits, you should pass nil. For more information on how we generate the UUID and Apple's policies on IDs, see https://segment.io/libraries/ios#ids - + @param traits A dictionary of traits you know about the user. Things like: email, name, plan, etc. - + @param options A dictionary of options, such as the `@"anonymousId"` key. If no anonymous ID is specified one will be generated for you. - + @discussion When you learn more about who your user is, you can record that information with identify. - + */ - (void)identify:(NSString *)userId traits:(NSDictionary *)traits options:(NSDictionary *)options; - (void)identify:(NSString *)userId; @@ -143,19 +143,19 @@ extern NSString *SEGAnalyticsIntegrationDidStart; /*! @method - + @abstract Record the actions your users perform. - + @param event The name of the event you're tracking. We recommend using human-readable names like `Played a Song` or `Updated Status`. - + @param properties A dictionary of properties for the event. If the event was 'Added to Shopping Cart', it might have properties like price, productType, etc. - + @discussion When a user performs an action in your app, you'll want to track that action for later analysis. Use the event name to say what the user did, and properties to specify any interesting details of the action. - + */ - (void)track:(NSString *)event; - (void)track:(NSString *)event properties:(NSDictionary *)properties; @@ -163,19 +163,19 @@ extern NSString *SEGAnalyticsIntegrationDidStart; /*! @method - + @abstract Record the screens or views your users see. - + @param screenTitle The title of the screen being viewed. We recommend using human-readable names like 'Photo Feed' or 'Completed Purchase Screen'. - + @param properties A dictionary of properties for the screen view event. If the event was 'Added to Shopping Cart', it might have properties like price, productType, etc. - + @discussion When a user views a screen in your app, you'll want to record that here. For some tools like Google Analytics and Flurry, screen views are treated specially, and are different from "events" kind of like "page views" on the web. For services that don't treat "screen views" specially, we map "screen" straight to "track" with the same parameters. For example, Mixpanel doesn't treat "screen views" any differently. So a call to "screen" will be tracked as a normal event in Mixpanel, but get sent to Google Analytics and Flurry as a "screen". - + */ - (void)screen:(NSString *)screenTitle; - (void)screen:(NSString *)screenTitle properties:(NSDictionary *)properties; @@ -183,16 +183,16 @@ extern NSString *SEGAnalyticsIntegrationDidStart; /*! @method - + @abstract Associate a user with a group, organization, company, project, or w/e *you* call them. - + @param groupId A database ID for this group. @param traits A dictionary of traits you know about the group. Things like: name, employees, etc. - + @discussion When you learn more about who the group is, you can record that information with group. - + */ - (void)group:(NSString *)groupId; - (void)group:(NSString *)groupId traits:(NSDictionary *)traits; @@ -200,17 +200,17 @@ extern NSString *SEGAnalyticsIntegrationDidStart; /*! @method - + @abstract Merge two user identities, effectively connecting two sets of user data as one. This may not be supported by all integrations. - + @param newId The new ID you want to alias the existing ID to. The existing ID will be either the previousId if you have called identify, or the anonymous ID. - + @discussion When you learn more about who the group is, you can record that information with group. - + */ - (void)alias:(NSString *)newId; - (void)alias:(NSString *)newId options:(NSDictionary *)options; @@ -225,10 +225,10 @@ extern NSString *SEGAnalyticsIntegrationDidStart; /*! @method - + @abstract Trigger an upload of all queued events. - + @discussion This is useful when you want to force all messages queued on the device to be uploaded. Please note that not all integrations respond to this method. @@ -237,10 +237,10 @@ extern NSString *SEGAnalyticsIntegrationDidStart; /*! @method - + @abstract Reset any user state that is cached on the device. - + @discussion This is useful when a user logs out and you want to clear the identity. It will clear any traits or userId's cached on the device. @@ -249,10 +249,10 @@ extern NSString *SEGAnalyticsIntegrationDidStart; /*! @method - + @abstract Enable the sending of analytics data. Enabled by default. - + @discussion Occasionally used in conjunction with disable user opt-out handling. */ @@ -261,10 +261,10 @@ extern NSString *SEGAnalyticsIntegrationDidStart; /*! @method - + @abstract Completely disable the sending of any analytics data. - + @discussion If have a way for users to actively or passively (sometimes based on location) opt-out of analytics data collection, you can use this method to turn off all data collection. @@ -283,6 +283,9 @@ extern NSString *SEGAnalyticsIntegrationDidStart; */ - (NSDictionary *)bundledIntegrations; +/** Returns the anonymous ID of the current user. */ +- (NSString *)getAnonymousId; + /** Returns the configuration used to create the analytics client. */ - (SEGAnalyticsConfiguration *)configuration; diff --git a/Analytics/Classes/SEGAnalytics.m b/Analytics/Classes/SEGAnalytics.m index eff841d7d..64a9994a4 100644 --- a/Analytics/Classes/SEGAnalytics.m +++ b/Analytics/Classes/SEGAnalytics.m @@ -11,6 +11,7 @@ static SEGAnalytics *__sharedInstance = nil; NSString *SEGAnalyticsIntegrationDidStart = @"io.segment.analytics.integration.did.start"; +NSString *const SEGAnonymousIdKey = @"SEGAnonymousId"; @interface SEGAnalyticsConfiguration () @@ -74,6 +75,7 @@ @interface SEGAnalytics () @property (nonatomic, strong) NSMutableDictionary *registeredIntegrations; @property (nonatomic) volatile BOOL initialized; @property (nonatomic, strong) SEGStoreKitTracker *storeKitTracker; +@property (nonatomic, copy) NSString *cachedAnonymousId; @end @@ -103,6 +105,11 @@ - (instancetype)initWithConfiguration:(SEGAnalyticsConfiguration *)configuration self.integrations = [NSMutableDictionary dictionaryWithCapacity:self.factories.count]; self.registeredIntegrations = [NSMutableDictionary dictionaryWithCapacity:self.factories.count]; self.configuration = configuration; + self.cachedAnonymousId = [self loadOrGenerateAnonymousID:NO]; + +#if !TARGET_OS_TV + [self addSkipBackupAttributeToItemAtPath:self.anonymousIDURL]; +#endif // Update settings on each integration immediately [self refreshSettings]; @@ -247,10 +254,17 @@ - (void)identify:(NSString *)userId traits:(NSDictionary *)traits - (void)identify:(NSString *)userId traits:(NSDictionary *)traits options:(NSDictionary *)options { - NSCParameterAssert(userId.length > 0 || traits.count > 0); + NSCAssert2(userId.length > 0 > traits.count > 0, @"either userId (%@) or traits (%@) must be provided.", userId, traits); + + NSString *anonymousId = [options objectForKey:@"anonymousId"]; + if (anonymousId) { + [self saveAnonymousId:anonymousId]; + } else { + anonymousId = self.cachedAnonymousId; + } SEGIdentifyPayload *payload = [[SEGIdentifyPayload alloc] initWithUserId:userId - anonymousId:[options objectForKey:@"anonymousId"] + anonymousId:anonymousId traits:SEGCoerceDictionary(traits) context:SEGCoerceDictionary([options objectForKey:@"context"]) integrations:[options objectForKey:@"integrations"]]; @@ -275,7 +289,7 @@ - (void)track:(NSString *)event properties:(NSDictionary *)properties - (void)track:(NSString *)event properties:(NSDictionary *)properties options:(NSDictionary *)options { - NSCParameterAssert(event.length > 0); + NSCAssert1(event.length > 0, @"event (%@) must not be empty.", event); SEGTrackPayload *payload = [[SEGTrackPayload alloc] initWithEvent:event properties:SEGCoerceDictionary(properties) @@ -290,21 +304,21 @@ - (void)track:(NSString *)event properties:(NSDictionary *)properties options:(N #pragma mark - Screen -- (void)screen:(NSString *)screenTitle +- (void)screen:(NSString *)name { - [self screen:screenTitle properties:nil options:nil]; + [self screen:name properties:nil options:nil]; } -- (void)screen:(NSString *)screenTitle properties:(NSDictionary *)properties +- (void)screen:(NSString *)name properties:(NSDictionary *)properties { - [self screen:screenTitle properties:properties options:nil]; + [self screen:name properties:properties options:nil]; } -- (void)screen:(NSString *)screenTitle properties:(NSDictionary *)properties options:(NSDictionary *)options +- (void)screen:(NSString *)name properties:(NSDictionary *)properties options:(NSDictionary *)options { - NSCParameterAssert(screenTitle.length > 0); + NSCAssert1(name.length > 0, @"screen name (%@) must not be empty.", name); - SEGScreenPayload *payload = [[SEGScreenPayload alloc] initWithName:screenTitle + SEGScreenPayload *payload = [[SEGScreenPayload alloc] initWithName:name properties:SEGCoerceDictionary(properties) context:SEGCoerceDictionary([options objectForKey:@"context"]) integrations:[options objectForKey:@"integrations"]]; @@ -426,9 +440,76 @@ - (void)openURL:(NSURL *)url options:(NSDictionary *)options - (void)reset { + [self resetAnonymousId]; [self callIntegrationsWithSelector:_cmd arguments:nil options:nil sync:false]; } +- (void)resetAnonymousId +{ + self.cachedAnonymousId = [self loadOrGenerateAnonymousID:YES]; +} + +- (NSString *)getAnonymousId; +{ + return self.cachedAnonymousId; +} + +- (NSURL *)anonymousIDURL +{ + return SEGAnalyticsURLForFilename(@"segment.anonymousId"); +} + +- (void)addSkipBackupAttributeToItemAtPath:(NSURL *)url +{ + BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:[url path]]; + if (!exists) { + return; + } + + NSError *error = nil; + BOOL success = [url setResourceValue:[NSNumber numberWithBool:YES] + forKey:NSURLIsExcludedFromBackupKey + error:&error]; + if (!success) { + SEGLog(@"Error excluding %@ from backup %@", [url lastPathComponent], error); + } + return; +} + +- (NSString *)loadOrGenerateAnonymousID:(BOOL)reset +{ +#if TARGET_OS_TV + NSString *anonymousId = [[NSUserDefaults standardUserDefaults] valueForKey:SEGAnonymousIdKey]; +#else + NSURL *url = self.anonymousIDURL; + NSString *anonymousId = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:NULL]; +#endif + + if (!anonymousId || reset) { + // We've chosen to generate a UUID rather than use the UDID (deprecated in iOS 5), + // identifierForVendor (iOS6 and later, can't be changed on logout), + // or MAC address (blocked in iOS 7). For more info see https://segment.io/libraries/ios#ids + anonymousId = GenerateUUIDString(); + SEGLog(@"New anonymousId: %@", anonymousId); +#if TARGET_OS_TV + [[NSUserDefaults standardUserDefaults] setObject:anonymousId forKey:SEGAnonymousIdKey]; +#else + [anonymousId writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:NULL]; +#endif + } + return anonymousId; +} + +- (void)saveAnonymousId:(NSString *)anonymousId +{ + self.cachedAnonymousId = anonymousId; +#if TARGET_OS_TV + [[NSUserDefaults standardUserDefaults] setValue:anonymousId forKey:SEGAnonymousIdKey]; +#else + [self.cachedAnonymousId writeToURL:self.anonymousIDURL atomically:YES encoding:NSUTF8StringEncoding error:NULL]; +#endif +} + - (void)flush { [self callIntegrationsWithSelector:_cmd arguments:nil options:nil sync:false]; @@ -521,7 +602,7 @@ - (void)refreshSettings + (instancetype)sharedAnalytics { - NSCParameterAssert(__sharedInstance != nil); + NSCAssert(__sharedInstance != nil, @"library must be initialized before calling this method."); return __sharedInstance; } From 900eb95203b986f1710d20fc31652fb96f4cbe4c Mon Sep 17 00:00:00 2001 From: Prateek Srivastava Date: Tue, 12 Jul 2016 11:56:34 -0600 Subject: [PATCH 2/5] fix selector name --- Analytics/Classes/SEGAnalytics.m | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Analytics/Classes/SEGAnalytics.m b/Analytics/Classes/SEGAnalytics.m index 64a9994a4..fe39d9c98 100644 --- a/Analytics/Classes/SEGAnalytics.m +++ b/Analytics/Classes/SEGAnalytics.m @@ -304,21 +304,21 @@ - (void)track:(NSString *)event properties:(NSDictionary *)properties options:(N #pragma mark - Screen -- (void)screen:(NSString *)name +- (void)screen:(NSString *)screenTitle { - [self screen:name properties:nil options:nil]; + [self screen:screenTitle properties:nil options:nil]; } -- (void)screen:(NSString *)name properties:(NSDictionary *)properties +- (void)screen:(NSString *)screenTitle properties:(NSDictionary *)properties { - [self screen:name properties:properties options:nil]; + [self screen:screenTitle properties:properties options:nil]; } -- (void)screen:(NSString *)name properties:(NSDictionary *)properties options:(NSDictionary *)options +- (void)screen:(NSString *)screenTitle properties:(NSDictionary *)properties options:(NSDictionary *)options { - NSCAssert1(name.length > 0, @"screen name (%@) must not be empty.", name); + NSCAssert1(screenTitle.length > 0, @"screen name (%@) must not be empty.", screenTitle); - SEGScreenPayload *payload = [[SEGScreenPayload alloc] initWithName:name + SEGScreenPayload *payload = [[SEGScreenPayload alloc] initWithName:screenTitle properties:SEGCoerceDictionary(properties) context:SEGCoerceDictionary([options objectForKey:@"context"]) integrations:[options objectForKey:@"integrations"]]; From d5db28ab9d15aa06b4e3a5c91f813d5c12a419a8 Mon Sep 17 00:00:00 2001 From: Prateek Srivastava Date: Wed, 20 Jul 2016 13:35:41 -0600 Subject: [PATCH 3/5] Refactor HTTP code and add proxy support. (#578) This refactors the HTTP interaction in the library + Segment integration. Internally, it moves away from `NSURLConnection` to `NSURLSession`. `SEGAnalyticsRequest` is replaced by `NSURLSessionTask`, and a thin wrapper class `SEGHTTPClient` is introduced to simplify the interaction between the library and the Segment API. This also adds tests for the networking code by stubbing the Segment API using https://github.com/luisobo/Nocilla so the behaviour of `SEGHTTPClient` can be verified under different responses from the server. Publicly, it also adds a `SEGRequestFactory` abstraction that given a URL returns a `NSMutableURLRequest `. The default implementation simply calls `[NSMutableURLRequest requestWithURL:url]`. It is configurable, and this lets users customize the `NSMutableURLRequest` made by the library. e.g. users could change it to point the SDK to a custom proxy instance. --- .../Classes/Internal/SEGAnalyticsRequest.h | 18 - .../Classes/Internal/SEGAnalyticsRequest.m | 120 -- Analytics/Classes/Internal/SEGHTTPClient.h | 23 + Analytics/Classes/Internal/SEGHTTPClient.m | 141 ++ .../Classes/Internal/SEGSegmentIntegration.h | 3 - .../Classes/Internal/SEGSegmentIntegration.m | 112 +- Analytics/Classes/SEGAnalytics.h | 7 + Analytics/Classes/SEGAnalytics.m | 32 +- Example/Analytics.xcodeproj/project.pbxproj | 4 + Example/Analytics/Main.storyboard | 4 +- Example/Analytics/SEGAppDelegate.h | 8 - Example/Analytics/SEGAppDelegate.m | 36 - Example/Analytics/SEGViewController.h | 8 - Example/Analytics/SEGViewController.m | 8 - Example/Podfile | 3 +- Example/Podfile.lock | 5 +- Example/Pods/Manifest.lock | 5 +- Example/Pods/Nocilla/LICENSE | 21 + .../Nocilla/Categories/NSData+Nocilla.h | 6 + .../Nocilla/Categories/NSData+Nocilla.m | 9 + .../Nocilla/Categories/NSString+Nocilla.h | 8 + .../Nocilla/Categories/NSString+Nocilla.m | 18 + .../DSL/LSHTTPRequestDSLRepresentation.h | 6 + .../DSL/LSHTTPRequestDSLRepresentation.m | 39 + .../Nocilla/Nocilla/DSL/LSStubRequestDSL.h | 39 + .../Nocilla/Nocilla/DSL/LSStubRequestDSL.m | 72 + .../Nocilla/Nocilla/DSL/LSStubResponseDSL.h | 19 + .../Nocilla/Nocilla/DSL/LSStubResponseDSL.m | 40 + .../Nocilla/Nocilla/Diff/LSHTTPRequestDiff.h | 8 + .../Nocilla/Nocilla/Diff/LSHTTPRequestDiff.m | 114 ++ .../Hooks/ASIHTTPRequest/ASIHTTPRequestStub.h | 8 + .../Hooks/ASIHTTPRequest/ASIHTTPRequestStub.m | 52 + .../ASIHTTPRequest/LSASIHTTPRequestAdapter.h | 10 + .../ASIHTTPRequest/LSASIHTTPRequestAdapter.m | 42 + .../ASIHTTPRequest/LSASIHTTPRequestHook.h | 5 + .../ASIHTTPRequest/LSASIHTTPRequestHook.m | 48 + .../Nocilla/Nocilla/Hooks/LSHTTPClientHook.h | 6 + .../Nocilla/Nocilla/Hooks/LSHTTPClientHook.m | 13 + .../NSURLRequest/LSHTTPStubURLProtocol.h | 5 + .../NSURLRequest/LSHTTPStubURLProtocol.m | 70 + .../Nocilla/Hooks/NSURLRequest/LSNSURLHook.h | 5 + .../Nocilla/Hooks/NSURLRequest/LSNSURLHook.m | 14 + .../Hooks/NSURLRequest/NSURLRequest+DSL.h | 5 + .../Hooks/NSURLRequest/NSURLRequest+DSL.m | 9 + .../NSURLRequest/NSURLRequest+LSHTTPRequest.h | 6 + .../NSURLRequest/NSURLRequest+LSHTTPRequest.m | 47 + .../Hooks/NSURLSession/LSNSURLSessionHook.h | 15 + .../Hooks/NSURLSession/LSNSURLSessionHook.m | 40 + Example/Pods/Nocilla/Nocilla/LSNocilla.h | 25 + Example/Pods/Nocilla/Nocilla/LSNocilla.m | 111 + .../Nocilla/Nocilla/Matchers/LSDataMatcher.h | 16 + .../Nocilla/Nocilla/Matchers/LSDataMatcher.m | 32 + .../Nocilla/Nocilla/Matchers/LSMatcheable.h | 9 + .../Pods/Nocilla/Nocilla/Matchers/LSMatcher.h | 9 + .../Pods/Nocilla/Nocilla/Matchers/LSMatcher.m | 13 + .../Nocilla/Nocilla/Matchers/LSRegexMatcher.h | 7 + .../Nocilla/Nocilla/Matchers/LSRegexMatcher.m | 21 + .../Nocilla/Matchers/LSStringMatcher.h | 8 + .../Nocilla/Matchers/LSStringMatcher.m | 23 + .../Nocilla/Matchers/NSData+Matcheable.h | 14 + .../Nocilla/Matchers/NSData+Matcheable.m | 18 + .../Matchers/NSRegularExpression+Matcheable.h | 6 + .../Matchers/NSRegularExpression+Matcheable.m | 10 + .../Nocilla/Matchers/NSString+Matcheable.h | 6 + .../Nocilla/Matchers/NSString+Matcheable.m | 10 + .../Pods/Nocilla/Nocilla/Model/LSHTTPBody.h | 5 + .../Nocilla/Nocilla/Model/LSHTTPRequest.h | 10 + .../Nocilla/Nocilla/Model/LSHTTPResponse.h | 7 + Example/Pods/Nocilla/Nocilla/Nocilla.h | 26 + .../Nocilla/Nocilla/Stubs/LSStubRequest.h | 24 + .../Nocilla/Nocilla/Stubs/LSStubRequest.m | 97 + .../Nocilla/Nocilla/Stubs/LSStubResponse.h | 18 + .../Nocilla/Nocilla/Stubs/LSStubResponse.m | 81 + Example/Pods/Nocilla/README.md | 193 ++ Example/Pods/Pods.xcodeproj/project.pbxproj | 1781 ++++++++++------- .../Analytics/Analytics-umbrella.h | 2 +- .../Target Support Files/Nocilla/Info.plist | 26 + .../Nocilla/Nocilla-dummy.m | 5 + .../Nocilla/Nocilla-prefix.pch | 4 + .../Nocilla/Nocilla-umbrella.h | 17 + .../Nocilla/Nocilla.modulemap | 6 + .../Nocilla/Nocilla.xcconfig | 9 + ...-Analytics_Tests-acknowledgements.markdown | 24 + ...ods-Analytics_Tests-acknowledgements.plist | 28 + .../Pods-Analytics_Tests-frameworks.sh | 2 + .../Pods-Analytics_Tests.debug.xcconfig | 6 +- .../Pods-Analytics_Tests.release.xcconfig | 6 +- Example/Tests/SEGHTTPClientTests.m | 242 +++ Example/Tests/Tests-Prefix.pch | 4 +- Example/Tests/Tests.m | 1 - 90 files changed, 3299 insertions(+), 999 deletions(-) delete mode 100644 Analytics/Classes/Internal/SEGAnalyticsRequest.h delete mode 100644 Analytics/Classes/Internal/SEGAnalyticsRequest.m create mode 100644 Analytics/Classes/Internal/SEGHTTPClient.h create mode 100644 Analytics/Classes/Internal/SEGHTTPClient.m create mode 100644 Example/Pods/Nocilla/LICENSE create mode 100644 Example/Pods/Nocilla/Nocilla/Categories/NSData+Nocilla.h create mode 100644 Example/Pods/Nocilla/Nocilla/Categories/NSData+Nocilla.m create mode 100644 Example/Pods/Nocilla/Nocilla/Categories/NSString+Nocilla.h create mode 100644 Example/Pods/Nocilla/Nocilla/Categories/NSString+Nocilla.m create mode 100644 Example/Pods/Nocilla/Nocilla/DSL/LSHTTPRequestDSLRepresentation.h create mode 100644 Example/Pods/Nocilla/Nocilla/DSL/LSHTTPRequestDSLRepresentation.m create mode 100644 Example/Pods/Nocilla/Nocilla/DSL/LSStubRequestDSL.h create mode 100644 Example/Pods/Nocilla/Nocilla/DSL/LSStubRequestDSL.m create mode 100644 Example/Pods/Nocilla/Nocilla/DSL/LSStubResponseDSL.h create mode 100644 Example/Pods/Nocilla/Nocilla/DSL/LSStubResponseDSL.m create mode 100644 Example/Pods/Nocilla/Nocilla/Diff/LSHTTPRequestDiff.h create mode 100644 Example/Pods/Nocilla/Nocilla/Diff/LSHTTPRequestDiff.m create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.h create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.m create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.h create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.m create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.h create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.m create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/LSHTTPClientHook.h create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/LSHTTPClientHook.m create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.h create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.m create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSNSURLHook.h create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSNSURLHook.m create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.h create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.m create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.h create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.m create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.h create mode 100644 Example/Pods/Nocilla/Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.m create mode 100644 Example/Pods/Nocilla/Nocilla/LSNocilla.h create mode 100644 Example/Pods/Nocilla/Nocilla/LSNocilla.m create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/LSDataMatcher.h create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/LSDataMatcher.m create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/LSMatcheable.h create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/LSMatcher.h create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/LSMatcher.m create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/LSRegexMatcher.h create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/LSRegexMatcher.m create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/LSStringMatcher.h create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/LSStringMatcher.m create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/NSData+Matcheable.h create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/NSData+Matcheable.m create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/NSRegularExpression+Matcheable.h create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/NSRegularExpression+Matcheable.m create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/NSString+Matcheable.h create mode 100644 Example/Pods/Nocilla/Nocilla/Matchers/NSString+Matcheable.m create mode 100644 Example/Pods/Nocilla/Nocilla/Model/LSHTTPBody.h create mode 100644 Example/Pods/Nocilla/Nocilla/Model/LSHTTPRequest.h create mode 100644 Example/Pods/Nocilla/Nocilla/Model/LSHTTPResponse.h create mode 100644 Example/Pods/Nocilla/Nocilla/Nocilla.h create mode 100644 Example/Pods/Nocilla/Nocilla/Stubs/LSStubRequest.h create mode 100644 Example/Pods/Nocilla/Nocilla/Stubs/LSStubRequest.m create mode 100644 Example/Pods/Nocilla/Nocilla/Stubs/LSStubResponse.h create mode 100644 Example/Pods/Nocilla/Nocilla/Stubs/LSStubResponse.m create mode 100644 Example/Pods/Nocilla/README.md create mode 100644 Example/Pods/Target Support Files/Nocilla/Info.plist create mode 100644 Example/Pods/Target Support Files/Nocilla/Nocilla-dummy.m create mode 100644 Example/Pods/Target Support Files/Nocilla/Nocilla-prefix.pch create mode 100644 Example/Pods/Target Support Files/Nocilla/Nocilla-umbrella.h create mode 100644 Example/Pods/Target Support Files/Nocilla/Nocilla.modulemap create mode 100644 Example/Pods/Target Support Files/Nocilla/Nocilla.xcconfig create mode 100644 Example/Tests/SEGHTTPClientTests.m diff --git a/Analytics/Classes/Internal/SEGAnalyticsRequest.h b/Analytics/Classes/Internal/SEGAnalyticsRequest.h deleted file mode 100644 index 0615374d8..000000000 --- a/Analytics/Classes/Internal/SEGAnalyticsRequest.h +++ /dev/null @@ -1,18 +0,0 @@ -#import - -typedef void (^SEGAnalyticsRequestCompletionBlock)(void); - - -@interface SEGAnalyticsRequest : NSObject - -@property (nonatomic, copy) SEGAnalyticsRequestCompletionBlock completion; -@property (nonatomic, readonly) NSURLRequest *urlRequest; -@property (nonatomic, readonly) NSHTTPURLResponse *response; -@property (nonatomic, readonly) NSData *responseData; -@property (nonatomic, readonly) id responseJSON; -@property (nonatomic, readonly) NSError *error; - -+ (instancetype)startWithURLRequest:(NSURLRequest *)urlRequest - completion:(SEGAnalyticsRequestCompletionBlock)completion; - -@end diff --git a/Analytics/Classes/Internal/SEGAnalyticsRequest.m b/Analytics/Classes/Internal/SEGAnalyticsRequest.m deleted file mode 100644 index 19b1c999a..000000000 --- a/Analytics/Classes/Internal/SEGAnalyticsRequest.m +++ /dev/null @@ -1,120 +0,0 @@ -#define AssertMainThread() NSCParameterAssert([NSThread isMainThread]) - -#import "SEGAnalyticsRequest.h" - - -@interface SEGAnalyticsRequest () -{ - NSMutableData *_responseData; -} - -@property (nonatomic, strong) NSURLConnection *connection; -@property (nonatomic, strong) NSURLRequest *urlRequest; -@property (nonatomic, strong) NSHTTPURLResponse *response; -@property (nonatomic, strong) NSData *responseData; -@property (nonatomic, strong) id responseJSON; -@property (nonatomic, strong) NSError *error; -@property (nonatomic, strong) NSIndexSet *acceptableStatusCodes; - -@end - - -@implementation SEGAnalyticsRequest - -- (id)initWithURLRequest:(NSURLRequest *)urlRequest -{ - if (self = [super init]) { - _urlRequest = urlRequest; - } - return self; -} - -- (void)start -{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - self.connection = [[NSURLConnection alloc] initWithRequest:self.urlRequest - delegate:self - startImmediately:NO]; -#pragma clang diagnostic pop - [self.connection setDelegateQueue:[[self class] networkQueue]]; - [self.connection start]; -} - -- (void)finish -{ - if (self.completion) - self.completion(); -} - -#pragma mark NSURLConnection Delegate - -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response -{ - self.response = (NSHTTPURLResponse *)response; - _responseData = [[NSMutableData alloc] init]; -} - -- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data -{ - [_responseData appendData:data]; -} - -- (void)connectionDidFinishLoading:(NSURLConnection *)connection -{ - NSInteger statusCode = self.response.statusCode; - if ([self.acceptableStatusCodes containsIndex:statusCode]) { - NSError *error = nil; - if (self.responseData.length > 0) { - self.responseJSON = [NSJSONSerialization JSONObjectWithData:self.responseData - options:0 - error:&error]; - self.error = error; - } - } else { - self.error = [NSError errorWithDomain:@"HTTP" - code:statusCode - userInfo:@{ NSLocalizedDescriptionKey : - [NSString stringWithFormat:@"HTTP Error %ld", (long)statusCode] }]; - } - [self finish]; -} - -- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error -{ - self.error = error; - [self finish]; -} - -#pragma mark - Class Methods - -+ (instancetype)startWithURLRequest:(NSURLRequest *)urlRequest - completion:(SEGAnalyticsRequestCompletionBlock)completion -{ - SEGAnalyticsRequest *request = [[self alloc] initWithURLRequest:urlRequest]; - request.completion = completion; - [request start]; - return request; -} - -+ (NSOperationQueue *)networkQueue -{ - static dispatch_once_t onceToken; - static NSOperationQueue *networkQueue; - dispatch_once(&onceToken, ^{ - networkQueue = [[NSOperationQueue alloc] init]; - }); - return networkQueue; -} - -#pragma mark - Private - -- (NSIndexSet *)acceptableStatusCodes -{ - if (!_acceptableStatusCodes) { - _acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)]; - } - return _acceptableStatusCodes; -} - -@end diff --git a/Analytics/Classes/Internal/SEGHTTPClient.h b/Analytics/Classes/Internal/SEGHTTPClient.h new file mode 100644 index 000000000..44093ef7e --- /dev/null +++ b/Analytics/Classes/Internal/SEGHTTPClient.h @@ -0,0 +1,23 @@ +#import +#import "SEGAnalytics.h" + + +@interface SEGHTTPClient : NSObject + +@property (nonatomic, strong) SEGRequestFactory requestFactory; + ++ (SEGRequestFactory)defaultRequestFactory; + +- (instancetype)initWithRequestFactory:(SEGRequestFactory)requestFactory; + +/** + * Upload dictionary formatted as per https://segment.com/docs/sources/server/http/#batch. + * This method will convert the dictionary to json, gzip it and upload the data. + * It will respond with retry = YES if the batch should be reuploaded at a later time. + * It will ask to retry for json errors and 3xx/5xx codes, and not retry for 2xx/4xx response codes. + */ +- (NSURLSessionUploadTask *)upload:(NSDictionary *)batch forWriteKey:(NSString *)writeKey completionHandler:(void (^)(BOOL retry))completionHandler; + +- (NSURLSessionDataTask *)settingsForWriteKey:(NSString *)writeKey completionHandler:(void (^)(BOOL success, NSDictionary *settings))completionHandler; + +@end diff --git a/Analytics/Classes/Internal/SEGHTTPClient.m b/Analytics/Classes/Internal/SEGHTTPClient.m new file mode 100644 index 000000000..c85344efc --- /dev/null +++ b/Analytics/Classes/Internal/SEGHTTPClient.m @@ -0,0 +1,141 @@ +#import "SEGHTTPClient.h" +#import "NSData+GZIP.h" +#import "SEGAnalyticsUtils.h" + + +@implementation SEGHTTPClient + ++ (NSMutableURLRequest * (^)(NSURL *))defaultRequestFactory +{ + return ^(NSURL *url) { + return [NSMutableURLRequest requestWithURL:url]; + }; +} + +- (instancetype)initWithRequestFactory:(SEGRequestFactory)requestFactory +{ + if (self = [self init]) { + if (requestFactory == nil) { + self.requestFactory = [SEGHTTPClient defaultRequestFactory]; + } else { + self.requestFactory = requestFactory; + } + } + return self; +} + +- (NSString *)authorizationHeader:(NSString *)writeKey +{ + NSString *rawHeader = [writeKey stringByAppendingString:@":"]; + NSData *userPasswordData = [rawHeader dataUsingEncoding:NSUTF8StringEncoding]; + return [userPasswordData base64EncodedStringWithOptions:0]; +} + +- (NSURLSessionUploadTask *)upload:(NSDictionary *)batch forWriteKey:(NSString *)writeKey completionHandler:(void (^)(BOOL retry))completionHandler +{ + NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; + config.HTTPAdditionalHeaders = @{ + @"Accept-Encoding" : @"gzip", + @"Content-Encoding" : @"gzip", + @"Content-Type" : @"application/json", + @"Authorization" : [@"Basic " stringByAppendingString:[self authorizationHeader:writeKey]], + }; + NSURLSession *session = [NSURLSession sessionWithConfiguration:config]; + + NSURL *url = [NSURL URLWithString:@"https://api.segment.io/v1/batch"]; + NSMutableURLRequest *request = self.requestFactory(url); + [request setHTTPMethod:@"POST"]; + + NSError *error = nil; + NSException *exception = nil; + NSData *payload = nil; + @try { + payload = [NSJSONSerialization dataWithJSONObject:batch options:0 error:&error]; + } + @catch (NSException *exc) { + exception = exc; + } + if (error || exception) { + SEGLog(@"%@ Error serializing JSON for batch upload %@", self, error); + completionHandler(NO); // Don't retry this batch. + return nil; + } + NSData *gzippedPayload = [payload seg_gzippedData]; + + NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromData:gzippedPayload completionHandler:^(NSData *_Nullable data, NSURLResponse *_Nullable response, NSError *_Nullable error) { + if (error) { + SEGLog(@"Error uploading request %@.", error); + completionHandler(YES); + return; + } + + NSInteger code = ((NSHTTPURLResponse *)response).statusCode; + if (code < 300) { + // 2xx response codes. + completionHandler(NO); + return; + } + if (code < 400) { + // 3xx response codes. + SEGLog(@"Server responded with unexpected HTTP code %d.", code); + completionHandler(YES); + return; + } + if (code < 500) { + // 4xx response codes. + SEGLog(@"Server rejected payload with HTTP code %d.", code); + completionHandler(NO); + return; + } + + // 5xx response codes. + SEGLog(@"Server error with HTTP code %d.", code); + completionHandler(YES); + }]; + [task resume]; + return task; +} + +- (NSURLSessionDataTask *)settingsForWriteKey:(NSString *)writeKey completionHandler:(void (^)(BOOL success, NSDictionary *settings))completionHandler +{ + NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; + config.HTTPAdditionalHeaders = @{ + @"Accept-Encoding" : @"gzip" + }; + NSURLSession *session = [NSURLSession sessionWithConfiguration:config]; + + NSString *rawURL = [NSString stringWithFormat:@"https://cdn.segment.com/v1/projects/%@/settings", writeKey]; + NSURL *url = [NSURL URLWithString:rawURL]; + NSMutableURLRequest *request = self.requestFactory(url); + [request setHTTPMethod:@"GET"]; + + NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *_Nullable data, NSURLResponse *_Nullable response, NSError *_Nullable error) { + if (error != nil) { + SEGLog(@"Error fetching settings %@.", error); + completionHandler(NO, nil); + return; + } + + NSInteger code = ((NSHTTPURLResponse *)response).statusCode; + if (code > 300) { + SEGLog(@"Server responded with unexpected HTTP code %d.", code); + completionHandler(NO, nil); + return; + } + + NSError *jsonError = nil; + id responseJson = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError]; + if (jsonError != nil) { + SEGLog(@"Error deserializing response body %@.", jsonError); + completionHandler(NO, nil); + return; + } + + // 2xx response codes. + completionHandler(YES, responseJson); + }]; + [task resume]; + return task; +} + +@end diff --git a/Analytics/Classes/Internal/SEGSegmentIntegration.h b/Analytics/Classes/Internal/SEGSegmentIntegration.h index 0cceb3a4b..10b6feb16 100644 --- a/Analytics/Classes/Internal/SEGSegmentIntegration.h +++ b/Analytics/Classes/Internal/SEGSegmentIntegration.h @@ -8,9 +8,6 @@ extern NSString *const SEGSegmentRequestDidFailNotification; @interface SEGSegmentIntegration : NSObject -@property (nonatomic, copy) NSString *userId; -@property (nonatomic, strong) NSURL *apiURL; - - (id)initWithAnalytics:(SEGAnalytics *)analytics; @end diff --git a/Analytics/Classes/Internal/SEGSegmentIntegration.m b/Analytics/Classes/Internal/SEGSegmentIntegration.m index 4eee5d234..eb6cc9cda 100644 --- a/Analytics/Classes/Internal/SEGSegmentIntegration.m +++ b/Analytics/Classes/Internal/SEGSegmentIntegration.m @@ -3,12 +3,12 @@ #import #import "SEGAnalytics.h" #import "SEGAnalyticsUtils.h" -#import "SEGAnalyticsRequest.h" #import "SEGSegmentIntegration.h" #import "SEGBluetooth.h" #import "SEGReachability.h" #import "SEGLocation.h" #import "NSData+GZIP.h" +#import "SEGHTTPClient.h" #if TARGET_OS_IOS #import @@ -52,8 +52,7 @@ @interface SEGSegmentIntegration () @property (nonatomic, strong) NSMutableArray *queue; @property (nonatomic, strong) NSDictionary *cachedStaticContext; -@property (nonatomic, strong) NSArray *batch; -@property (nonatomic, strong) SEGAnalyticsRequest *request; +@property (nonatomic, strong) NSURLSessionUploadTask *batchRequest; @property (nonatomic, assign) UIBackgroundTaskIdentifier flushTaskID; @property (nonatomic, strong) SEGBluetooth *bluetooth; @property (nonatomic, strong) SEGReachability *reachability; @@ -64,6 +63,16 @@ @interface SEGSegmentIntegration () @property (nonatomic, assign) SEGAnalytics *analytics; @property (nonatomic, assign) SEGAnalyticsConfiguration *configuration; @property (nonatomic, assign) NSDictionary *referrer; +@property (nonatomic, copy) NSString *userId; +@property (nonatomic, strong) NSURL *apiURL; +@property (nonatomic, strong) SEGHTTPClient *httpClient; + +@end + + +@interface SEGAnalytics () + +@property (nonatomic, strong) SEGHTTPClient *httpClient; @end @@ -73,7 +82,9 @@ @implementation SEGSegmentIntegration - (id)initWithAnalytics:(SEGAnalytics *)analytics { if (self = [super init]) { - self.configuration = [analytics configuration]; + self.analytics = analytics; + self.configuration = analytics.configuration; + self.httpClient = analytics.httpClient; self.apiURL = [NSURL URLWithString:@"https://api.segment.io/v1/import"]; self.userId = [self getUserId]; self.bluetooth = [[SEGBluetooth alloc] init]; @@ -82,7 +93,6 @@ - (id)initWithAnalytics:(SEGAnalytics *)analytics self.cachedStaticContext = [self staticContext]; self.serialQueue = seg_dispatch_queue_create_specific("io.segment.analytics.segmentio", DISPATCH_QUEUE_SERIAL); self.flushTaskID = UIBackgroundTaskInvalid; - self.analytics = analytics; #if !TARGET_OS_TV // Check for previous queue/track data in NSUserDefaults and remove if present @@ -471,38 +481,20 @@ - (void)flushWithMaxSize:(NSUInteger)maxBatchSize if ([self.queue count] == 0) { SEGLog(@"%@ No queued API calls to flush.", self); return; - } else if (self.request != nil) { + } + if (self.batchRequest != nil) { SEGLog(@"%@ API request already in progress, not flushing again.", self); return; - } else if ([self.queue count] >= maxBatchSize) { - self.batch = [self.queue subarrayWithRange:NSMakeRange(0, maxBatchSize)]; - } else { - self.batch = [NSArray arrayWithArray:self.queue]; } - SEGLog(@"%@ Flushing %lu of %lu queued API calls.", self, (unsigned long)self.batch.count, (unsigned long)self.queue.count); - - NSMutableDictionary *payloadDictionary = [[NSMutableDictionary alloc] init]; - [payloadDictionary setObject:self.configuration.writeKey forKey:@"writeKey"]; - [payloadDictionary setObject:iso8601FormattedString([NSDate date]) forKey:@"sentAt"]; - [payloadDictionary setObject:self.batch forKey:@"batch"]; - - SEGLog(@"Flushing payload %@", payloadDictionary); - - NSError *error = nil; - NSException *exception = nil; - NSData *payload = nil; - @try { - payload = [NSJSONSerialization dataWithJSONObject:payloadDictionary options:0 error:&error]; - } - @catch (NSException *exc) { - exception = exc; - } - if (error || exception) { - SEGLog(@"%@ Error serializing JSON: %@", self, error); + NSArray *batch; + if ([self.queue count] >= maxBatchSize) { + batch = [self.queue subarrayWithRange:NSMakeRange(0, maxBatchSize)]; } else { - [self sendData:payload]; + batch = [NSArray arrayWithArray:self.queue]; } + + [self sendData:batch]; }]; } @@ -511,7 +503,7 @@ - (void)flushQueueByLength [self dispatchBackground:^{ SEGLog(@"%@ Length is %lu.", self, (unsigned long)self.queue.count); - if (self.request == nil && [self.queue count] >= self.configuration.flushAt) { + if (self.batchRequest == nil && [self.queue count] >= self.configuration.flushAt) { [self flush]; } }]; @@ -534,8 +526,8 @@ - (void)reset self.userId = nil; self.traits = [NSMutableDictionary dictionary]; self.queue = [NSMutableArray array]; - self.request.completion = nil; - self.request = nil; + [self.batchRequest cancel]; + self.batchRequest = nil; }]; } @@ -565,35 +557,29 @@ - (void)notifyForName:(NSString *)name userInfo:(id)userInfo }); } -- (void)sendData:(NSData *)data -{ - NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:self.apiURL]; - [urlRequest setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; - [urlRequest setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"]; - [urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; - [urlRequest setHTTPMethod:@"POST"]; - [urlRequest setHTTPBody:[data seg_gzippedData]]; - - SEGLog(@"%@ Sending batch API request.", self); - self.request = [SEGAnalyticsRequest startWithURLRequest:urlRequest - completion:^{ - [self dispatchBackground:^{ - if (self.request.error) { - SEGLog(@"%@ API request had an error: %@", self, self.request.error); - [self notifyForName:SEGSegmentRequestDidFailNotification userInfo:self.batch]; - } else { - SEGLog(@"%@ API request success 200", self); - [self.queue removeObjectsInArray:self.batch]; - [self persistQueue]; - [self notifyForName:SEGSegmentRequestDidSucceedNotification userInfo:self.batch]; - } - - self.batch = nil; - self.request = nil; - [self endBackgroundTask]; - }]; - }]; - [self notifyForName:SEGSegmentDidSendRequestNotification userInfo:self.batch]; +- (void)sendData:(NSArray *)batch +{ + NSMutableDictionary *payload = [[NSMutableDictionary alloc] init]; + [payload setObject:iso8601FormattedString([NSDate date]) forKey:@"sentAt"]; + [payload setObject:batch forKey:@"batch"]; + + SEGLog(@"%@ Flushing %lu of %lu queued API calls.", self, (unsigned long)batch.count, (unsigned long)self.queue.count); + SEGLog(@"Flushing batch %@.", payload); + + self.batchRequest = [self.analytics.httpClient upload:payload forWriteKey:self.configuration.writeKey completionHandler:^(BOOL retry) { + if (retry) { + [self notifyForName:SEGSegmentRequestDidFailNotification userInfo:batch]; + self.batchRequest = nil; + return; + } + + [self.queue removeObjectsInArray:batch]; + [self persistQueue]; + [self notifyForName:SEGSegmentRequestDidSucceedNotification userInfo:batch]; + self.batchRequest = nil; + }]; + + [self notifyForName:SEGSegmentDidSendRequestNotification userInfo:batch]; } - (void)applicationDidEnterBackground diff --git a/Analytics/Classes/SEGAnalytics.h b/Analytics/Classes/SEGAnalytics.h index c28590d1b..e9fce0396 100644 --- a/Analytics/Classes/SEGAnalytics.h +++ b/Analytics/Classes/SEGAnalytics.h @@ -6,6 +6,8 @@ */ extern NSString *SEGAnalyticsIntegrationDidStart; +typedef NSMutableURLRequest * (^SEGRequestFactory)(NSURL *); + @protocol SEGIntegrationFactory; /** @@ -73,6 +75,11 @@ extern NSString *SEGAnalyticsIntegrationDidStart; */ @property (nonatomic, assign) NSDictionary *launchOptions; +/** + * Set a custom request factory. + */ +@property (nonatomic, strong) SEGRequestFactory requestFactory; + /** * Register a factory that can be used to create an integration. */ diff --git a/Analytics/Classes/SEGAnalytics.m b/Analytics/Classes/SEGAnalytics.m index fe39d9c98..af12a9d98 100644 --- a/Analytics/Classes/SEGAnalytics.m +++ b/Analytics/Classes/SEGAnalytics.m @@ -1,12 +1,12 @@ #import #import "SEGAnalyticsUtils.h" -#import "SEGAnalyticsRequest.h" #import "SEGAnalytics.h" #import "SEGIntegrationFactory.h" #import "SEGIntegration.h" #import "SEGSegmentIntegrationFactory.h" #import "UIViewController+SEGScreen.h" #import "SEGStoreKitTracker.h" +#import "SEGHTTPClient.h" #import static SEGAnalytics *__sharedInstance = nil; @@ -68,7 +68,6 @@ @interface SEGAnalytics () @property (nonatomic, strong) SEGAnalyticsConfiguration *configuration; @property (nonatomic, strong) dispatch_queue_t serialQueue; @property (nonatomic, strong) NSMutableArray *messageQueue; -@property (nonatomic, strong) SEGAnalyticsRequest *settingsRequest; @property (nonatomic, assign) BOOL enabled; @property (nonatomic, strong) NSArray *factories; @property (nonatomic, strong) NSMutableDictionary *integrations; @@ -76,6 +75,8 @@ @interface SEGAnalytics () @property (nonatomic) volatile BOOL initialized; @property (nonatomic, strong) SEGStoreKitTracker *storeKitTracker; @property (nonatomic, copy) NSString *cachedAnonymousId; +@property (nonatomic, strong) SEGHTTPClient *httpClient; +@property (nonatomic, strong) NSURLSessionDataTask *settingsRequest; @end @@ -106,6 +107,7 @@ - (instancetype)initWithConfiguration:(SEGAnalyticsConfiguration *)configuration self.registeredIntegrations = [NSMutableDictionary dictionaryWithCapacity:self.factories.count]; self.configuration = configuration; self.cachedAnonymousId = [self loadOrGenerateAnonymousID:NO]; + self.httpClient = [[SEGHTTPClient alloc] initWithRequestFactory:configuration.requestFactory]; #if !TARGET_OS_TV [self addSkipBackupAttributeToItemAtPath:self.anonymousIDURL]; @@ -575,27 +577,17 @@ - (void)updateIntegrationsWithSettings:(NSDictionary *)projectSettings - (void)refreshSettings { - if (_settingsRequest) + if (self.settingsRequest) { return; + } - NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://cdn.segment.com/v1/projects/%@/settings", self.configuration.writeKey]]]; - [urlRequest setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; - [urlRequest setHTTPMethod:@"GET"]; - - SEGLog(@"%@ Sending API settings request: %@", self, urlRequest); - - _settingsRequest = [SEGAnalyticsRequest startWithURLRequest:urlRequest - completion:^{ - seg_dispatch_specific_async(_serialQueue, ^{ - SEGLog(@"%@ Received API settings response: %@", self, _settingsRequest.responseJSON); - - if (_settingsRequest.error == nil) { - [self setCachedSettings:_settingsRequest.responseJSON]; - } + self.settingsRequest = [self.httpClient settingsForWriteKey:self.configuration.writeKey completionHandler:^(BOOL success, NSDictionary *settings) { + if (success) { + [self setCachedSettings:settings]; + } - _settingsRequest = nil; - }); - }]; + self.settingsRequest = nil; + }]; } #pragma mark - Class Methods diff --git a/Example/Analytics.xcodeproj/project.pbxproj b/Example/Analytics.xcodeproj/project.pbxproj index daf1aa92c..fc27b1dac 100644 --- a/Example/Analytics.xcodeproj/project.pbxproj +++ b/Example/Analytics.xcodeproj/project.pbxproj @@ -22,6 +22,7 @@ 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5B8195388D20070C39A /* InfoPlist.strings */; }; 6003F5BC195388D20070C39A /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5BB195388D20070C39A /* Tests.m */; }; 64E04EDF96525073D7D8D34E /* Pods_Analytics_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E05C973F89287FDE47C6992 /* Pods_Analytics_Tests.framework */; }; + 6E7A9E001D3ED0A600CDBE2E /* SEGHTTPClientTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7A9DFF1D3ED0A600CDBE2E /* SEGHTTPClientTests.m */; }; 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */; }; /* End PBXBuildFile section */ @@ -57,6 +58,7 @@ 6003F5B9195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 6003F5BB195388D20070C39A /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = ""; }; 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Prefix.pch"; sourceTree = ""; }; + 6E7A9DFF1D3ED0A600CDBE2E /* SEGHTTPClientTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SEGHTTPClientTests.m; sourceTree = ""; }; 734218FFCC49C7717424050E /* Pods-Analytics_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Analytics_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Analytics_Example/Pods-Analytics_Example.debug.xcconfig"; sourceTree = ""; }; 7FC27E3D6DA125422F91AF5C /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; @@ -168,6 +170,7 @@ isa = PBXGroup; children = ( 6003F5BB195388D20070C39A /* Tests.m */, + 6E7A9DFF1D3ED0A600CDBE2E /* SEGHTTPClientTests.m */, 6003F5B6195388D20070C39A /* Supporting Files */, ); path = Tests; @@ -400,6 +403,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6E7A9E001D3ED0A600CDBE2E /* SEGHTTPClientTests.m in Sources */, 6003F5BC195388D20070C39A /* Tests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Example/Analytics/Main.storyboard b/Example/Analytics/Main.storyboard index 745a13ee0..33f1c3131 100644 --- a/Example/Analytics/Main.storyboard +++ b/Example/Analytics/Main.storyboard @@ -1,8 +1,8 @@ - + - + diff --git a/Example/Analytics/SEGAppDelegate.h b/Example/Analytics/SEGAppDelegate.h index 4cb0c9354..215d14e7c 100644 --- a/Example/Analytics/SEGAppDelegate.h +++ b/Example/Analytics/SEGAppDelegate.h @@ -1,11 +1,3 @@ -// -// SEGAppDelegate.h -// Analytics -// -// Created by Prateek Srivastava on 06/20/2016. -// Copyright (c) 2016 Prateek Srivastava. All rights reserved. -// - @import UIKit; diff --git a/Example/Analytics/SEGAppDelegate.m b/Example/Analytics/SEGAppDelegate.m index dc09eef07..d5494943d 100644 --- a/Example/Analytics/SEGAppDelegate.m +++ b/Example/Analytics/SEGAppDelegate.m @@ -1,11 +1,3 @@ -// -// SEGAppDelegate.m -// Analytics -// -// Created by Prateek Srivastava on 06/20/2016. -// Copyright (c) 2016 Prateek Srivastava. All rights reserved. -// - #import "SEGAppDelegate.h" @@ -13,35 +5,7 @@ @implementation SEGAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // Override point for customization after application launch. return YES; } -- (void)applicationWillResignActive:(UIApplication *)application -{ - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. -} - -- (void)applicationDidEnterBackground:(UIApplication *)application -{ - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. -} - -- (void)applicationWillEnterForeground:(UIApplication *)application -{ - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. -} - -- (void)applicationDidBecomeActive:(UIApplication *)application -{ - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. -} - -- (void)applicationWillTerminate:(UIApplication *)application -{ - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. -} - @end diff --git a/Example/Analytics/SEGViewController.h b/Example/Analytics/SEGViewController.h index 302fa9307..558e10bf0 100644 --- a/Example/Analytics/SEGViewController.h +++ b/Example/Analytics/SEGViewController.h @@ -1,11 +1,3 @@ -// -// SEGViewController.h -// Analytics -// -// Created by Prateek Srivastava on 06/20/2016. -// Copyright (c) 2016 Prateek Srivastava. All rights reserved. -// - @import UIKit; diff --git a/Example/Analytics/SEGViewController.m b/Example/Analytics/SEGViewController.m index 068696f38..68e4ab5e6 100644 --- a/Example/Analytics/SEGViewController.m +++ b/Example/Analytics/SEGViewController.m @@ -1,11 +1,3 @@ -// -// SEGViewController.m -// Analytics -// -// Created by Prateek Srivastava on 06/20/2016. -// Copyright (c) 2016 Prateek Srivastava. All rights reserved. -// - #import "SEGViewController.h" diff --git a/Example/Podfile b/Example/Podfile index eef239104..2f62ac69a 100644 --- a/Example/Podfile +++ b/Example/Podfile @@ -7,6 +7,7 @@ target 'Analytics_Example' do inherit! :search_paths pod 'Specta' - pod 'Expecta' + pod 'Expecta' + pod 'Nocilla' end end diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 986502dd0..9306e337f 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,11 +1,13 @@ PODS: - Analytics (3.3.0) - Expecta (1.0.5) + - Nocilla (0.10.0) - Specta (1.0.5) DEPENDENCIES: - Analytics (from `../`) - Expecta + - Nocilla - Specta EXTERNAL SOURCES: @@ -15,8 +17,9 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Analytics: be3d952b8b0f21679e25af3b9dfbbab89597e897 Expecta: e1c022fcd33910b6be89c291d2775b3fe27a89fe + Nocilla: ae0a2b05f3087b473624ac2b25903695df51246a Specta: ac94d110b865115fe60ff2c6d7281053c6f8e8a2 -PODFILE CHECKSUM: bbe3b31e7c3a302618d52a7687259655f649eae7 +PODFILE CHECKSUM: 5263f231a5bab62699699bbd2020ba55d983cfaa COCOAPODS: 1.0.1 diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 986502dd0..9306e337f 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,11 +1,13 @@ PODS: - Analytics (3.3.0) - Expecta (1.0.5) + - Nocilla (0.10.0) - Specta (1.0.5) DEPENDENCIES: - Analytics (from `../`) - Expecta + - Nocilla - Specta EXTERNAL SOURCES: @@ -15,8 +17,9 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Analytics: be3d952b8b0f21679e25af3b9dfbbab89597e897 Expecta: e1c022fcd33910b6be89c291d2775b3fe27a89fe + Nocilla: ae0a2b05f3087b473624ac2b25903695df51246a Specta: ac94d110b865115fe60ff2c6d7281053c6f8e8a2 -PODFILE CHECKSUM: bbe3b31e7c3a302618d52a7687259655f649eae7 +PODFILE CHECKSUM: 5263f231a5bab62699699bbd2020ba55d983cfaa COCOAPODS: 1.0.1 diff --git a/Example/Pods/Nocilla/LICENSE b/Example/Pods/Nocilla/LICENSE new file mode 100644 index 000000000..c996ca1bf --- /dev/null +++ b/Example/Pods/Nocilla/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2012 Luis Solano Bonet +MIT License + +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/Example/Pods/Nocilla/Nocilla/Categories/NSData+Nocilla.h b/Example/Pods/Nocilla/Nocilla/Categories/NSData+Nocilla.h new file mode 100644 index 000000000..92ebbc75c --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Categories/NSData+Nocilla.h @@ -0,0 +1,6 @@ +#import +#import "LSHTTPBody.h" + +@interface NSData (Nocilla) + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Categories/NSData+Nocilla.m b/Example/Pods/Nocilla/Nocilla/Categories/NSData+Nocilla.m new file mode 100644 index 000000000..0572aeb50 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Categories/NSData+Nocilla.m @@ -0,0 +1,9 @@ +#import "NSData+Nocilla.h" + +@implementation NSData (Nocilla) + +- (NSData *)data { + return self; +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Categories/NSString+Nocilla.h b/Example/Pods/Nocilla/Nocilla/Categories/NSString+Nocilla.h new file mode 100644 index 000000000..cc0df6d89 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Categories/NSString+Nocilla.h @@ -0,0 +1,8 @@ +#import +#import "LSHTTPBody.h" + +@interface NSString (Nocilla) + +- (NSRegularExpression *)regex; + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Categories/NSString+Nocilla.m b/Example/Pods/Nocilla/Nocilla/Categories/NSString+Nocilla.m new file mode 100644 index 000000000..be28f78a7 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Categories/NSString+Nocilla.m @@ -0,0 +1,18 @@ +#import "NSString+Nocilla.h" + +@implementation NSString (Nocilla) + +- (NSRegularExpression *)regex { + NSError *error = nil; + NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:self options:0 error:&error]; + if (error) { + [NSException raise:NSInvalidArgumentException format:@"Invalid regex pattern: %@\nError: %@", self, error]; + } + return regex; +} + +- (NSData *)data { + return [self dataUsingEncoding:NSUTF8StringEncoding]; +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/DSL/LSHTTPRequestDSLRepresentation.h b/Example/Pods/Nocilla/Nocilla/DSL/LSHTTPRequestDSLRepresentation.h new file mode 100644 index 000000000..6a5fcb105 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/DSL/LSHTTPRequestDSLRepresentation.h @@ -0,0 +1,6 @@ +#import +#import "LSHTTPRequest.h" + +@interface LSHTTPRequestDSLRepresentation : NSObject +- (id)initWithRequest:(id)request; +@end diff --git a/Example/Pods/Nocilla/Nocilla/DSL/LSHTTPRequestDSLRepresentation.m b/Example/Pods/Nocilla/Nocilla/DSL/LSHTTPRequestDSLRepresentation.m new file mode 100644 index 000000000..bcfbb96cc --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/DSL/LSHTTPRequestDSLRepresentation.m @@ -0,0 +1,39 @@ +#import "LSHTTPRequestDSLRepresentation.h" + +@interface LSHTTPRequestDSLRepresentation () +@property (nonatomic, strong) id request; +@end + +@implementation LSHTTPRequestDSLRepresentation +- (id)initWithRequest:(id)request { + self = [super init]; + if (self) { + _request = request; + } + return self; +} + +- (NSString *)description { + NSMutableString *result = [NSMutableString stringWithFormat:@"stubRequest(@\"%@\", @\"%@\")", self.request.method, [self.request.url absoluteString]]; + if (self.request.headers.count) { + [result appendString:@".\nwithHeaders(@{ "]; + NSMutableArray *headerElements = [NSMutableArray arrayWithCapacity:self.request.headers.count]; + + NSArray *descriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"" ascending:YES]]; + NSArray * sortedHeaders = [[self.request.headers allKeys] sortedArrayUsingDescriptors:descriptors]; + + for (NSString * header in sortedHeaders) { + NSString *value = [self.request.headers objectForKey:header]; + [headerElements addObject:[NSString stringWithFormat:@"@\"%@\": @\"%@\"", header, value]]; + } + [result appendString:[headerElements componentsJoinedByString:@", "]]; + [result appendString:@" })"]; + } + if (self.request.body.length) { + NSString *escapedBody = [[NSString alloc] initWithData:self.request.body encoding:NSUTF8StringEncoding]; + escapedBody = [escapedBody stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; + [result appendFormat:@".\nwithBody(@\"%@\")", escapedBody]; + } + return [NSString stringWithFormat:@"%@;", result]; +} +@end diff --git a/Example/Pods/Nocilla/Nocilla/DSL/LSStubRequestDSL.h b/Example/Pods/Nocilla/Nocilla/DSL/LSStubRequestDSL.h new file mode 100644 index 000000000..d7df7430b --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/DSL/LSStubRequestDSL.h @@ -0,0 +1,39 @@ +#import +#import "NSString+Matcheable.h" +#import "NSRegularExpression+Matcheable.h" +#import "NSData+Matcheable.h" + +@class LSStubRequestDSL; +@class LSStubResponseDSL; +@class LSStubRequest; + +@protocol LSHTTPBody; + +typedef LSStubRequestDSL *(^WithHeaderMethod)(NSString *, NSString *); +typedef LSStubRequestDSL *(^WithHeadersMethod)(NSDictionary *); +typedef LSStubRequestDSL *(^AndBodyMethod)(id); +typedef LSStubResponseDSL *(^AndReturnMethod)(NSInteger); +typedef LSStubResponseDSL *(^AndReturnRawResponseMethod)(NSData *rawResponseData); +typedef void (^AndFailWithErrorMethod)(NSError *error); + +@interface LSStubRequestDSL : NSObject +- (id)initWithRequest:(LSStubRequest *)request; + +@property (nonatomic, strong, readonly) WithHeaderMethod withHeader; +@property (nonatomic, strong, readonly) WithHeadersMethod withHeaders; +@property (nonatomic, strong, readonly) AndBodyMethod withBody; +@property (nonatomic, strong, readonly) AndReturnMethod andReturn; +@property (nonatomic, strong, readonly) AndReturnRawResponseMethod andReturnRawResponse; +@property (nonatomic, strong, readonly) AndFailWithErrorMethod andFailWithError; + +@end + +#ifdef __cplusplus +extern "C" { +#endif + +LSStubRequestDSL * stubRequest(NSString *method, id url); + +#ifdef __cplusplus +} +#endif diff --git a/Example/Pods/Nocilla/Nocilla/DSL/LSStubRequestDSL.m b/Example/Pods/Nocilla/Nocilla/DSL/LSStubRequestDSL.m new file mode 100644 index 000000000..831e0c014 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/DSL/LSStubRequestDSL.m @@ -0,0 +1,72 @@ +#import "LSStubRequestDSL.h" +#import "LSStubResponseDSL.h" +#import "LSStubRequest.h" +#import "LSNocilla.h" + +@interface LSStubRequestDSL () +@property (nonatomic, strong) LSStubRequest *request; +@end + +@implementation LSStubRequestDSL + +- (id)initWithRequest:(LSStubRequest *)request { + self = [super init]; + if (self) { + _request = request; + } + return self; +} +- (WithHeadersMethod)withHeaders { + return ^(NSDictionary *headers) { + for (NSString *header in headers) { + NSString *value = [headers objectForKey:header]; + [self.request setHeader:header value:value]; + } + return self; + }; +} + +- (WithHeaderMethod)withHeader { + return ^(NSString * header, NSString * value) { + [self.request setHeader:header value:value]; + return self; + }; +} + +- (AndBodyMethod)withBody { + return ^(id body) { + self.request.body = body.matcher; + return self; + }; +} + +- (AndReturnMethod)andReturn { + return ^(NSInteger statusCode) { + self.request.response = [[LSStubResponse alloc] initWithStatusCode:statusCode]; + LSStubResponseDSL *responseDSL = [[LSStubResponseDSL alloc] initWithResponse:self.request.response]; + return responseDSL; + }; +} + +- (AndReturnRawResponseMethod)andReturnRawResponse { + return ^(NSData *rawResponseData) { + self.request.response = [[LSStubResponse alloc] initWithRawResponse:rawResponseData]; + LSStubResponseDSL *responseDSL = [[LSStubResponseDSL alloc] initWithResponse:self.request.response]; + return responseDSL; + }; +} + +- (AndFailWithErrorMethod)andFailWithError { + return ^(NSError *error) { + self.request.response = [[LSStubResponse alloc] initWithError:error]; + }; +} + +@end + +LSStubRequestDSL * stubRequest(NSString *method, id url) { + LSStubRequest *request = [[LSStubRequest alloc] initWithMethod:method urlMatcher:url.matcher]; + LSStubRequestDSL *dsl = [[LSStubRequestDSL alloc] initWithRequest:request]; + [[LSNocilla sharedInstance] addStubbedRequest:request]; + return dsl; +} diff --git a/Example/Pods/Nocilla/Nocilla/DSL/LSStubResponseDSL.h b/Example/Pods/Nocilla/Nocilla/DSL/LSStubResponseDSL.h new file mode 100644 index 000000000..2ba6b6633 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/DSL/LSStubResponseDSL.h @@ -0,0 +1,19 @@ +#import + +@class LSStubResponse; +@class LSStubResponseDSL; + +@protocol LSHTTPBody; + +typedef LSStubResponseDSL *(^ResponseWithBodyMethod)(id); +typedef LSStubResponseDSL *(^ResponseWithHeaderMethod)(NSString *, NSString *); +typedef LSStubResponseDSL *(^ResponseWithHeadersMethod)(NSDictionary *); + +@interface LSStubResponseDSL : NSObject +- (id)initWithResponse:(LSStubResponse *)response; + +@property (nonatomic, strong, readonly) ResponseWithHeaderMethod withHeader; +@property (nonatomic, strong, readonly) ResponseWithHeadersMethod withHeaders; +@property (nonatomic, strong, readonly) ResponseWithBodyMethod withBody; + +@end diff --git a/Example/Pods/Nocilla/Nocilla/DSL/LSStubResponseDSL.m b/Example/Pods/Nocilla/Nocilla/DSL/LSStubResponseDSL.m new file mode 100644 index 000000000..06e978644 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/DSL/LSStubResponseDSL.m @@ -0,0 +1,40 @@ +#import "LSStubResponseDSL.h" +#import "LSStubResponse.h" +#import "LSHTTPBody.h" + +@interface LSStubResponseDSL () +@property (nonatomic, strong) LSStubResponse *response; +@end + +@implementation LSStubResponseDSL +- (id)initWithResponse:(LSStubResponse *)response { + self = [super init]; + if (self) { + _response = response; + } + return self; +} +- (ResponseWithHeaderMethod)withHeader { + return ^(NSString * header, NSString * value) { + [self.response setHeader:header value:value]; + return self; + }; +} + +- (ResponseWithHeadersMethod)withHeaders; { + return ^(NSDictionary *headers) { + for (NSString *header in headers) { + NSString *value = [headers objectForKey:header]; + [self.response setHeader:header value:value]; + } + return self; + }; +} + +- (ResponseWithBodyMethod)withBody { + return ^(id body) { + self.response.body = [body data]; + return self; + }; +} +@end diff --git a/Example/Pods/Nocilla/Nocilla/Diff/LSHTTPRequestDiff.h b/Example/Pods/Nocilla/Nocilla/Diff/LSHTTPRequestDiff.h new file mode 100644 index 000000000..2f9b8eac4 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Diff/LSHTTPRequestDiff.h @@ -0,0 +1,8 @@ +#import +#import "LSHTTPRequest.h" + +@interface LSHTTPRequestDiff : NSObject +@property (nonatomic, assign, readonly, getter = isEmpty) BOOL empty; + +- (id)initWithRequest:(id)oneRequest andRequest:(id)anotherRequest; +@end diff --git a/Example/Pods/Nocilla/Nocilla/Diff/LSHTTPRequestDiff.m b/Example/Pods/Nocilla/Nocilla/Diff/LSHTTPRequestDiff.m new file mode 100644 index 000000000..413121d57 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Diff/LSHTTPRequestDiff.m @@ -0,0 +1,114 @@ +#import "LSHTTPRequestDiff.h" + +@interface LSHTTPRequestDiff () +@property (nonatomic, strong) idoneRequest; +@property (nonatomic, strong) idanotherRequest; + +- (BOOL)isMethodDifferent; +- (BOOL)isUrlDifferent; +- (BOOL)areHeadersDifferent; +- (BOOL)isBodyDifferent; + +- (void)appendMethodDiff:(NSMutableString *)diff; +- (void)appendUrlDiff:(NSMutableString *)diff; +- (void)appendHeadersDiff:(NSMutableString *)diff; +- (void)appendBodyDiff:(NSMutableString *)diff; +@end + +@implementation LSHTTPRequestDiff +- (id)initWithRequest:(id)oneRequest andRequest:(id)anotherRequest { + self = [super init]; + if (self) { + _oneRequest = oneRequest; + _anotherRequest = anotherRequest; + } + return self; +} + +- (BOOL)isEmpty { + if ([self isMethodDifferent] || + [self isUrlDifferent] || + [self areHeadersDifferent] || + [self isBodyDifferent]) { + return NO; + } + return YES; +} + +- (NSString *)description { + NSMutableString *diff = [@"" mutableCopy]; + if ([self isMethodDifferent]) { + [self appendMethodDiff:diff]; + } + if ([self isUrlDifferent]) { + [self appendUrlDiff:diff]; + } + if([self areHeadersDifferent]) { + [self appendHeadersDiff:diff]; + } + if([self isBodyDifferent]) { + [self appendBodyDiff:diff]; + } + return [NSString stringWithString:diff]; +} + +#pragma mark - Private Methods +- (BOOL)isMethodDifferent { + return ![self.oneRequest.method isEqualToString:self.anotherRequest.method]; +} + +- (BOOL)isUrlDifferent { + return ![self.oneRequest.url isEqual:self.anotherRequest.url]; +} + +- (BOOL)areHeadersDifferent { + return ![self.oneRequest.headers isEqual:self.anotherRequest.headers]; +} + +- (BOOL)isBodyDifferent { + return (((self.oneRequest.body) && (![self.oneRequest.body isEqual:self.anotherRequest.body])) || + ((self.anotherRequest.body) && (![self.anotherRequest.body isEqual:self.oneRequest.body]))); +} + +- (void)appendMethodDiff:(NSMutableString *)diff { + [diff appendFormat:@"- Method: %@\n+ Method: %@\n", self.oneRequest.method, self.anotherRequest.method]; +} + +- (void)appendUrlDiff:(NSMutableString *)diff { + [diff appendFormat:@"- URL: %@\n+ URL: %@\n", [self.oneRequest.url absoluteString], [self.anotherRequest.url absoluteString]]; +} + +- (void)appendHeadersDiff:(NSMutableString *)diff { + [diff appendString:@" Headers:\n"]; + NSSet *headersInOneButNotInTheOther = [self.oneRequest.headers keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) { + return ![self.anotherRequest.headers objectForKey:key] || ![obj isEqual:[self.anotherRequest.headers objectForKey:key]]; + }]; + NSSet *headersInTheOtherButNotInOne = [self.anotherRequest.headers keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) { + return ![self.oneRequest.headers objectForKey:key] || ![obj isEqual:[self.oneRequest.headers objectForKey:key]]; + }]; + + NSArray *descriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"" ascending:YES]]; + NSArray * sortedHeadersInOneButNotInTheOther = [headersInOneButNotInTheOther sortedArrayUsingDescriptors:descriptors]; + NSArray * sortedHeadersInTheOtherButNotInOne = [headersInTheOtherButNotInOne sortedArrayUsingDescriptors:descriptors]; + for (NSString *header in sortedHeadersInOneButNotInTheOther) { + NSString *value = [self.oneRequest.headers objectForKey:header]; + [diff appendFormat:@"-\t\"%@\": \"%@\"\n", header, value]; + + } + for (NSString *header in sortedHeadersInTheOtherButNotInOne) { + NSString *value = [self.anotherRequest.headers objectForKey:header]; + [diff appendFormat:@"+\t\"%@\": \"%@\"\n", header, value]; + } +} + +- (void)appendBodyDiff:(NSMutableString *)diff { + NSString *oneBody = [[NSString alloc] initWithData:self.oneRequest.body encoding:NSUTF8StringEncoding]; + if (oneBody.length) { + [diff appendFormat:@"- Body: \"%@\"\n", oneBody]; + } + NSString *anotherBody = [[NSString alloc] initWithData:self.anotherRequest.body encoding:NSUTF8StringEncoding]; + if (anotherBody.length) { + [diff appendFormat:@"+ Body: \"%@\"\n", anotherBody]; + } +} +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.h b/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.h new file mode 100644 index 000000000..f9ef36aca --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.h @@ -0,0 +1,8 @@ +#import + +@interface ASIHTTPRequestStub : NSObject +- (int)stub_responseStatusCode; +- (NSData *)stub_responseData; +- (NSDictionary *)stub_responseHeaders; +- (void)stub_startRequest; +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.m b/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.m new file mode 100644 index 000000000..712b4c916 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.m @@ -0,0 +1,52 @@ +#import "ASIHTTPRequestStub.h" +#import "LSStubResponse.h" +#import "LSNocilla.h" +#import "LSASIHTTPRequestAdapter.h" +#import + +@interface ASIHTTPRequestStub () +@property (nonatomic, strong) LSStubResponse *stubResponse; +@end + +@interface ASIHTTPRequestStub (Private) +- (void)failWithError:(NSError *)error; +- (void)requestFinished; +- (void)markAsFinished; +@end + +static void const * ASIHTTPRequestStubResponseKey = &ASIHTTPRequestStubResponseKey; + +@implementation ASIHTTPRequestStub + +- (void)setStubResponse:(LSStubResponse *)stubResponse { + objc_setAssociatedObject(self, ASIHTTPRequestStubResponseKey, stubResponse, OBJC_ASSOCIATION_RETAIN); +} + +- (LSStubResponse *)stubResponse { + return objc_getAssociatedObject(self, ASIHTTPRequestStubResponseKey); +} + +- (int)stub_responseStatusCode { + return (int)self.stubResponse.statusCode; +} + +- (NSData *)stub_responseData { + return self.stubResponse.body; +} + +- (NSDictionary *)stub_responseHeaders { + return self.stubResponse.headers; +} + +- (void)stub_startRequest { + self.stubResponse = [[LSNocilla sharedInstance] responseForRequest:[[LSASIHTTPRequestAdapter alloc] initWithASIHTTPRequest:(id)self]]; + + if (self.stubResponse.shouldFail) { + [self failWithError:self.stubResponse.error]; + } else { + [self requestFinished]; + } + [self markAsFinished]; +} + +@end \ No newline at end of file diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.h b/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.h new file mode 100644 index 000000000..6cf7b1c47 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.h @@ -0,0 +1,10 @@ +#import +#import "LSHTTPRequest.h" + +@class ASIHTTPRequest; + +@interface LSASIHTTPRequestAdapter : NSObject + +- (instancetype)initWithASIHTTPRequest:(ASIHTTPRequest *)request; + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.m b/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.m new file mode 100644 index 000000000..91cf7913c --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.m @@ -0,0 +1,42 @@ +#import "LSASIHTTPRequestAdapter.h" + +@interface ASIHTTPRequest + +@property (nonatomic, strong, readonly) NSURL *url; +@property (nonatomic, strong, readonly) NSString *requestMethod; +@property (nonatomic, strong, readonly) NSDictionary *requestHeaders; +@property (nonatomic, strong, readonly) NSData *postBody; + +@end + +@interface LSASIHTTPRequestAdapter () +@property (nonatomic, strong) ASIHTTPRequest *request; +@end + +@implementation LSASIHTTPRequestAdapter + +- (instancetype)initWithASIHTTPRequest:(ASIHTTPRequest *)request { + self = [super init]; + if (self) { + _request = request; + } + return self; +} + +- (NSURL *)url { + return self.request.url; +} + +- (NSString *)method { + return self.request.requestMethod; +} + +- (NSDictionary *)headers { + return self.request.requestHeaders; +} + +- (NSData *)body { + return self.request.postBody; +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.h b/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.h new file mode 100644 index 000000000..2450072ee --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.h @@ -0,0 +1,5 @@ +#import "LSHTTPClientHook.h" + +@interface LSASIHTTPRequestHook : LSHTTPClientHook + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.m b/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.m new file mode 100644 index 000000000..1a32a47a0 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.m @@ -0,0 +1,48 @@ +#import "LSASIHTTPRequestHook.h" +#import "ASIHTTPRequestStub.h" +#import + +@implementation LSASIHTTPRequestHook + +- (void)load { + if (!NSClassFromString(@"ASIHTTPRequest")) return; + [self swizzleASIHTTPRequest]; +} + +- (void)unload { + if (!NSClassFromString(@"ASIHTTPRequest")) return; + [self swizzleASIHTTPRequest]; +} + +#pragma mark - Internal Methods + +- (void)swizzleASIHTTPRequest { + [self swizzleASIHTTPSelector:NSSelectorFromString(@"responseStatusCode") withSelector:@selector(stub_responseStatusCode)]; + [self swizzleASIHTTPSelector:NSSelectorFromString(@"responseData") withSelector:@selector(stub_responseData)]; + [self swizzleASIHTTPSelector:NSSelectorFromString(@"responseHeaders") withSelector:@selector(stub_responseHeaders)]; + [self swizzleASIHTTPSelector:NSSelectorFromString(@"startRequest") withSelector:@selector(stub_startRequest)]; + [self addMethodToASIHTTPRequest:NSSelectorFromString(@"stubResponse")]; + [self addMethodToASIHTTPRequest:NSSelectorFromString(@"setStubResponse:")]; +} + +- (void)swizzleASIHTTPSelector:(SEL)original withSelector:(SEL)stub { + Class asiHttpRequest = NSClassFromString(@"ASIHTTPRequest"); + Method originalMethod = class_getInstanceMethod(asiHttpRequest, original); + Method stubMethod = class_getInstanceMethod([ASIHTTPRequestStub class], stub); + if (!originalMethod || !stubMethod) { + [self fail]; + } + method_exchangeImplementations(originalMethod, stubMethod); +} + +- (void)addMethodToASIHTTPRequest:(SEL)newMethod { + Method method = class_getInstanceMethod([ASIHTTPRequestStub class], newMethod); + const char *types = method_getTypeEncoding(method); + class_addMethod(NSClassFromString(@"ASIHTTPRequest"), newMethod, class_getMethodImplementation([ASIHTTPRequestStub class], newMethod), types); +} + +- (void)fail { + [NSException raise:NSInternalInconsistencyException format:@"Couldn't load ASIHTTPRequest hook."]; +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/LSHTTPClientHook.h b/Example/Pods/Nocilla/Nocilla/Hooks/LSHTTPClientHook.h new file mode 100644 index 000000000..80ddc4c22 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/LSHTTPClientHook.h @@ -0,0 +1,6 @@ +#import + +@interface LSHTTPClientHook : NSObject +- (void)load; +- (void)unload; +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/LSHTTPClientHook.m b/Example/Pods/Nocilla/Nocilla/Hooks/LSHTTPClientHook.m new file mode 100644 index 000000000..8256ca66e --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/LSHTTPClientHook.m @@ -0,0 +1,13 @@ +#import "LSHTTPClientHook.h" + +@implementation LSHTTPClientHook +- (void)load { + [NSException raise:NSInternalInconsistencyException + format:@"Method '%@' not implemented. Subclass '%@' and override it", NSStringFromSelector(_cmd), NSStringFromClass([self class])]; +} + +- (void)unload { + [NSException raise:NSInternalInconsistencyException + format:@"Method '%@' not implemented. Subclass '%@' and override it", NSStringFromSelector(_cmd), NSStringFromClass([self class])]; +} +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.h b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.h new file mode 100644 index 000000000..d5a9a1f09 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.h @@ -0,0 +1,5 @@ +#import + +@interface LSHTTPStubURLProtocol : NSURLProtocol + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.m b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.m new file mode 100644 index 000000000..4af21ce62 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.m @@ -0,0 +1,70 @@ +#import "LSHTTPStubURLProtocol.h" +#import "LSNocilla.h" +#import "NSURLRequest+LSHTTPRequest.h" +#import "LSStubRequest.h" +#import "NSURLRequest+DSL.h" + +@interface NSHTTPURLResponse(UndocumentedInitializer) +- (id)initWithURL:(NSURL*)URL statusCode:(NSInteger)statusCode headerFields:(NSDictionary*)headerFields requestTime:(double)requestTime; +@end + +@implementation LSHTTPStubURLProtocol + ++ (BOOL)canInitWithRequest:(NSURLRequest *)request { + return [@[ @"http", @"https" ] containsObject:request.URL.scheme]; +} + ++ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request { + return request; +} ++ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b { + return NO; +} + +- (void)startLoading { + NSURLRequest* request = [self request]; + id client = [self client]; + + LSStubResponse* stubbedResponse = [[LSNocilla sharedInstance] responseForRequest:request]; + + if (stubbedResponse.shouldFail) { + [client URLProtocol:self didFailWithError:stubbedResponse.error]; + } else { + NSHTTPURLResponse* urlResponse = [[NSHTTPURLResponse alloc] initWithURL:request.URL + statusCode:stubbedResponse.statusCode + headerFields:stubbedResponse.headers + requestTime:0]; + + if (stubbedResponse.statusCode < 300 || stubbedResponse.statusCode > 399 + || stubbedResponse.statusCode == 304 || stubbedResponse.statusCode == 305 ) { + NSData *body = stubbedResponse.body; + + [client URLProtocol:self didReceiveResponse:urlResponse + cacheStoragePolicy:NSURLCacheStorageNotAllowed]; + [client URLProtocol:self didLoadData:body]; + [client URLProtocolDidFinishLoading:self]; + } else { + NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + [cookieStorage setCookies:[NSHTTPCookie cookiesWithResponseHeaderFields:stubbedResponse.headers forURL:request.url] + forURL:request.URL mainDocumentURL:request.URL]; + + NSURL *newURL = [NSURL URLWithString:[stubbedResponse.headers objectForKey:@"Location"] relativeToURL:request.URL]; + NSMutableURLRequest *redirectRequest = [NSMutableURLRequest requestWithURL:newURL]; + + [redirectRequest setAllHTTPHeaderFields:[NSHTTPCookie requestHeaderFieldsWithCookies:[cookieStorage cookiesForURL:newURL]]]; + + [client URLProtocol:self + wasRedirectedToRequest:redirectRequest + redirectResponse:urlResponse]; + // According to: https://developer.apple.com/library/ios/samplecode/CustomHTTPProtocol/Listings/CustomHTTPProtocol_Core_Code_CustomHTTPProtocol_m.html + // needs to abort the original request + [client URLProtocol:self didFailWithError:[NSError errorWithDomain:NSCocoaErrorDomain code:NSUserCancelledError userInfo:nil]]; + + } + } +} + +- (void)stopLoading { +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSNSURLHook.h b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSNSURLHook.h new file mode 100644 index 000000000..abba2cbfd --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSNSURLHook.h @@ -0,0 +1,5 @@ +#import "LSHTTPClientHook.h" + +@interface LSNSURLHook : LSHTTPClientHook + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSNSURLHook.m b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSNSURLHook.m new file mode 100644 index 000000000..77d702002 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/LSNSURLHook.m @@ -0,0 +1,14 @@ +#import "LSNSURLHook.h" +#import "LSHTTPStubURLProtocol.h" + +@implementation LSNSURLHook + +- (void)load { + [NSURLProtocol registerClass:[LSHTTPStubURLProtocol class]]; +} + +- (void)unload { + [NSURLProtocol unregisterClass:[LSHTTPStubURLProtocol class]]; +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.h b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.h new file mode 100644 index 000000000..e13dbbd42 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.h @@ -0,0 +1,5 @@ +#import + +@interface NSURLRequest (DSL) +- (NSString *)toNocillaDSL; +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.m b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.m new file mode 100644 index 000000000..73e249b14 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.m @@ -0,0 +1,9 @@ +#import "NSURLRequest+DSL.h" +#import "LSHTTPRequestDSLRepresentation.h" +#import "NSURLRequest+LSHTTPRequest.h" + +@implementation NSURLRequest (DSL) +- (NSString *)toNocillaDSL { + return [[[LSHTTPRequestDSLRepresentation alloc] initWithRequest:self] description]; +} +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.h b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.h new file mode 100644 index 000000000..0ac96b2d8 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.h @@ -0,0 +1,6 @@ +#import +#import "LSHTTPRequest.h" + +@interface NSURLRequest (LSHTTPRequest) + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.m b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.m new file mode 100644 index 000000000..a6c300767 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.m @@ -0,0 +1,47 @@ +#import "NSURLRequest+LSHTTPRequest.h" + +@implementation NSURLRequest (LSHTTPRequest) + +- (NSURL*)url { + return self.URL; +} + +- (NSString *)method { + return self.HTTPMethod; +} + +- (NSDictionary *)headers { + return self.allHTTPHeaderFields; +} + +- (NSData *)body { + if (self.HTTPBodyStream) { + NSInputStream *stream = self.HTTPBodyStream; + NSMutableData *data = [NSMutableData data]; + [stream open]; + size_t bufferSize = 4096; + uint8_t *buffer = malloc(bufferSize); + if (buffer == NULL) { + [NSException raise:@"NocillaMallocFailure" format:@"Could not allocate %zu bytes to read HTTPBodyStream", bufferSize]; + } + while ([stream hasBytesAvailable]) { + NSInteger bytesRead = [stream read:buffer maxLength:bufferSize]; + if (bytesRead > 0) { + NSData *readData = [NSData dataWithBytes:buffer length:bytesRead]; + [data appendData:readData]; + } else if (bytesRead < 0) { + [NSException raise:@"NocillaStreamReadError" format:@"An error occurred while reading HTTPBodyStream (%ld)", (long)bytesRead]; + } else if (bytesRead == 0) { + break; + } + } + free(buffer); + [stream close]; + + return data; + } + + return self.HTTPBody; +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.h b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.h new file mode 100644 index 000000000..aa6ec8c46 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.h @@ -0,0 +1,15 @@ +// +// LSNSURLSessionHook.h +// Nocilla +// +// Created by Luis Solano Bonet on 08/01/14. +// Copyright (c) 2014 Luis Solano Bonet. All rights reserved. +// + +#import + +#import "LSHTTPClientHook.h" + +@interface LSNSURLSessionHook : LSHTTPClientHook + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.m b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.m new file mode 100644 index 000000000..ab584f59b --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.m @@ -0,0 +1,40 @@ +// +// LSNSURLSessionHook.m +// Nocilla +// +// Created by Luis Solano Bonet on 08/01/14. +// Copyright (c) 2014 Luis Solano Bonet. All rights reserved. +// + +#import "LSNSURLSessionHook.h" +#import "LSHTTPStubURLProtocol.h" +#import + +@implementation LSNSURLSessionHook + +- (void)load { + Class cls = NSClassFromString(@"__NSCFURLSessionConfiguration") ?: NSClassFromString(@"NSURLSessionConfiguration"); + [self swizzleSelector:@selector(protocolClasses) fromClass:cls toClass:[self class]]; +} + +- (void)unload { + Class cls = NSClassFromString(@"__NSCFURLSessionConfiguration") ?: NSClassFromString(@"NSURLSessionConfiguration"); + [self swizzleSelector:@selector(protocolClasses) fromClass:cls toClass:[self class]]; +} + +- (void)swizzleSelector:(SEL)selector fromClass:(Class)original toClass:(Class)stub { + + Method originalMethod = class_getInstanceMethod(original, selector); + Method stubMethod = class_getInstanceMethod(stub, selector); + if (!originalMethod || !stubMethod) { + [NSException raise:NSInternalInconsistencyException format:@"Couldn't load NSURLSession hook."]; + } + method_exchangeImplementations(originalMethod, stubMethod); +} + +- (NSArray *)protocolClasses { + return @[[LSHTTPStubURLProtocol class]]; +} + + +@end diff --git a/Example/Pods/Nocilla/Nocilla/LSNocilla.h b/Example/Pods/Nocilla/Nocilla/LSNocilla.h new file mode 100644 index 000000000..aa85901e9 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/LSNocilla.h @@ -0,0 +1,25 @@ +#import +#import "Nocilla.h" + +@class LSStubRequest; +@class LSStubResponse; +@class LSHTTPClientHook; +@protocol LSHTTPRequest; + +extern NSString * const LSUnexpectedRequest; + +@interface LSNocilla : NSObject ++ (LSNocilla *)sharedInstance; + +@property (nonatomic, strong, readonly) NSArray *stubbedRequests; +@property (nonatomic, assign, readonly, getter = isStarted) BOOL started; + +- (void)start; +- (void)stop; +- (void)addStubbedRequest:(LSStubRequest *)request; +- (void)clearStubs; + +- (void)registerHook:(LSHTTPClientHook *)hook; + +- (LSStubResponse *)responseForRequest:(id)request; +@end diff --git a/Example/Pods/Nocilla/Nocilla/LSNocilla.m b/Example/Pods/Nocilla/Nocilla/LSNocilla.m new file mode 100644 index 000000000..78ce6f5c1 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/LSNocilla.m @@ -0,0 +1,111 @@ +#import "LSNocilla.h" +#import "LSNSURLHook.h" +#import "LSStubRequest.h" +#import "LSHTTPRequestDSLRepresentation.h" +#import "LSASIHTTPRequestHook.h" +#import "LSNSURLSessionHook.h" +#import "LSASIHTTPRequestHook.h" + +NSString * const LSUnexpectedRequest = @"Unexpected Request"; + +@interface LSNocilla () +@property (nonatomic, strong) NSMutableArray *mutableRequests; +@property (nonatomic, strong) NSMutableArray *hooks; +@property (nonatomic, assign, getter = isStarted) BOOL started; + +- (void)loadHooks; +- (void)unloadHooks; +@end + +static LSNocilla *sharedInstace = nil; + +@implementation LSNocilla + ++ (LSNocilla *)sharedInstance { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedInstace = [[self alloc] init]; + }); + return sharedInstace; +} + +- (id)init { + self = [super init]; + if (self) { + _mutableRequests = [NSMutableArray array]; + _hooks = [NSMutableArray array]; + [self registerHook:[[LSNSURLHook alloc] init]]; + if (NSClassFromString(@"NSURLSession") != nil) { + [self registerHook:[[LSNSURLSessionHook alloc] init]]; + } + [self registerHook:[[LSASIHTTPRequestHook alloc] init]]; + } + return self; +} + +- (NSArray *)stubbedRequests { + return [NSArray arrayWithArray:self.mutableRequests]; +} + +- (void)start { + if (!self.isStarted){ + [self loadHooks]; + self.started = YES; + } +} + +- (void)stop { + [self unloadHooks]; + [self clearStubs]; + self.started = NO; +} + +- (void)addStubbedRequest:(LSStubRequest *)request { + [self.mutableRequests addObject:request]; +} + +- (void)clearStubs { + [self.mutableRequests removeAllObjects]; +} + +- (LSStubResponse *)responseForRequest:(id)actualRequest { + NSArray* requests = [LSNocilla sharedInstance].stubbedRequests; + + for(LSStubRequest *someStubbedRequest in requests) { + if ([someStubbedRequest matchesRequest:actualRequest]) { + return someStubbedRequest.response; + } + } + [NSException raise:@"NocillaUnexpectedRequest" format:@"An unexpected HTTP request was fired.\n\nUse this snippet to stub the request:\n%@\n", [[[LSHTTPRequestDSLRepresentation alloc] initWithRequest:actualRequest] description]]; + + return nil; +} + +- (void)registerHook:(LSHTTPClientHook *)hook { + if (![self hookWasRegistered:hook]) { + [[self hooks] addObject:hook]; + } +} + +- (BOOL)hookWasRegistered:(LSHTTPClientHook *)aHook { + for (LSHTTPClientHook *hook in self.hooks) { + if ([hook isMemberOfClass: [aHook class]]) { + return YES; + } + } + return NO; +} +#pragma mark - Private +- (void)loadHooks { + for (LSHTTPClientHook *hook in self.hooks) { + [hook load]; + } +} + +- (void)unloadHooks { + for (LSHTTPClientHook *hook in self.hooks) { + [hook unload]; + } +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/LSDataMatcher.h b/Example/Pods/Nocilla/Nocilla/Matchers/LSDataMatcher.h new file mode 100644 index 000000000..f935da5b8 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/LSDataMatcher.h @@ -0,0 +1,16 @@ +// +// LSDataMatcher.h +// Nocilla +// +// Created by Luis Solano Bonet on 09/11/14. +// Copyright (c) 2014 Luis Solano Bonet. All rights reserved. +// + +#import +#import "LSMatcher.h" + +@interface LSDataMatcher : LSMatcher + +- (instancetype)initWithData:(NSData *)data; + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/LSDataMatcher.m b/Example/Pods/Nocilla/Nocilla/Matchers/LSDataMatcher.m new file mode 100644 index 000000000..8b987c574 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/LSDataMatcher.m @@ -0,0 +1,32 @@ +// +// LSDataMatcher.m +// Nocilla +// +// Created by Luis Solano Bonet on 09/11/14. +// Copyright (c) 2014 Luis Solano Bonet. All rights reserved. +// + +#import "LSDataMatcher.h" + +@interface LSDataMatcher () + +@property (nonatomic, copy) NSData *data; + +@end + +@implementation LSDataMatcher + +- (instancetype)initWithData:(NSData *)data { + self = [super init]; + + if (self) { + _data = data; + } + return self; +} + +- (BOOL)matchesData:(NSData *)data { + return [self.data isEqualToData:data]; +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/LSMatcheable.h b/Example/Pods/Nocilla/Nocilla/Matchers/LSMatcheable.h new file mode 100644 index 000000000..db14c6cb9 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/LSMatcheable.h @@ -0,0 +1,9 @@ +#import + +@class LSMatcher; + +@protocol LSMatcheable + +- (LSMatcher *)matcher; + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/LSMatcher.h b/Example/Pods/Nocilla/Nocilla/Matchers/LSMatcher.h new file mode 100644 index 000000000..bea8305f3 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/LSMatcher.h @@ -0,0 +1,9 @@ +#import + +@interface LSMatcher : NSObject + +- (BOOL)matches:(NSString *)string; + +- (BOOL)matchesData:(NSData *)data; + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/LSMatcher.m b/Example/Pods/Nocilla/Nocilla/Matchers/LSMatcher.m new file mode 100644 index 000000000..5c06fc9bb --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/LSMatcher.m @@ -0,0 +1,13 @@ +#import "LSMatcher.h" + +@implementation LSMatcher + +- (BOOL)matches:(NSString *)string { + @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"[LSMatcher matches:] is an abstract method" userInfo:nil]; +} + +- (BOOL)matchesData:(NSData *)data { + return [self matches:[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]]; +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/LSRegexMatcher.h b/Example/Pods/Nocilla/Nocilla/Matchers/LSRegexMatcher.h new file mode 100644 index 000000000..7111c8728 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/LSRegexMatcher.h @@ -0,0 +1,7 @@ +#import "LSMatcher.h" + +@interface LSRegexMatcher : LSMatcher + +- (instancetype)initWithRegex:(NSRegularExpression *)regex; + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/LSRegexMatcher.m b/Example/Pods/Nocilla/Nocilla/Matchers/LSRegexMatcher.m new file mode 100644 index 000000000..34fef70a9 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/LSRegexMatcher.m @@ -0,0 +1,21 @@ +#import "LSRegexMatcher.h" + +@interface LSRegexMatcher () +@property (nonatomic, strong) NSRegularExpression *regex; +@end + +@implementation LSRegexMatcher + +- (instancetype)initWithRegex:(NSRegularExpression *)regex { + self = [super init]; + if (self) { + _regex = regex; + } + return self; +} + +- (BOOL)matches:(NSString *)string { + return [self.regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, string.length)] > 0; +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/LSStringMatcher.h b/Example/Pods/Nocilla/Nocilla/Matchers/LSStringMatcher.h new file mode 100644 index 000000000..56af21262 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/LSStringMatcher.h @@ -0,0 +1,8 @@ +#import +#import "LSMatcher.h" + +@interface LSStringMatcher : LSMatcher + +- (instancetype)initWithString:(NSString *)string; + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/LSStringMatcher.m b/Example/Pods/Nocilla/Nocilla/Matchers/LSStringMatcher.m new file mode 100644 index 000000000..ea9ffa66d --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/LSStringMatcher.m @@ -0,0 +1,23 @@ +#import "LSStringMatcher.h" + +@interface LSStringMatcher () + +@property (nonatomic, copy) NSString *string; + +@end + +@implementation LSStringMatcher + +- (instancetype)initWithString:(NSString *)string { + self = [super init]; + if (self) { + _string = string; + } + return self; +} + +- (BOOL)matches:(NSString *)string { + return [self.string isEqualToString:string]; +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/NSData+Matcheable.h b/Example/Pods/Nocilla/Nocilla/Matchers/NSData+Matcheable.h new file mode 100644 index 000000000..c3dfef944 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/NSData+Matcheable.h @@ -0,0 +1,14 @@ +// +// NSData+Matcheable.h +// Nocilla +// +// Created by Luis Solano Bonet on 09/11/14. +// Copyright (c) 2014 Luis Solano Bonet. All rights reserved. +// + +#import +#import "LSMatcheable.h" + +@interface NSData (Matcheable) + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/NSData+Matcheable.m b/Example/Pods/Nocilla/Nocilla/Matchers/NSData+Matcheable.m new file mode 100644 index 000000000..ab454bc0d --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/NSData+Matcheable.m @@ -0,0 +1,18 @@ +// +// NSData+Matcheable.m +// Nocilla +// +// Created by Luis Solano Bonet on 09/11/14. +// Copyright (c) 2014 Luis Solano Bonet. All rights reserved. +// + +#import "NSData+Matcheable.h" +#import "LSDataMatcher.h" + +@implementation NSData (Matcheable) + +- (LSMatcher *)matcher { + return [[LSDataMatcher alloc] initWithData:self]; +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/NSRegularExpression+Matcheable.h b/Example/Pods/Nocilla/Nocilla/Matchers/NSRegularExpression+Matcheable.h new file mode 100644 index 000000000..9d9717f89 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/NSRegularExpression+Matcheable.h @@ -0,0 +1,6 @@ +#import +#import "LSMatcheable.h" + +@interface NSRegularExpression (Matcheable) + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/NSRegularExpression+Matcheable.m b/Example/Pods/Nocilla/Nocilla/Matchers/NSRegularExpression+Matcheable.m new file mode 100644 index 000000000..39792c51c --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/NSRegularExpression+Matcheable.m @@ -0,0 +1,10 @@ +#import "NSRegularExpression+Matcheable.h" +#import "LSRegexMatcher.h" + +@implementation NSRegularExpression (Matcheable) + +- (LSMatcher *)matcher { + return [[LSRegexMatcher alloc] initWithRegex:self]; +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/NSString+Matcheable.h b/Example/Pods/Nocilla/Nocilla/Matchers/NSString+Matcheable.h new file mode 100644 index 000000000..ca63ec737 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/NSString+Matcheable.h @@ -0,0 +1,6 @@ +#import +#import "LSMatcheable.h" + +@interface NSString (Matcheable) + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Matchers/NSString+Matcheable.m b/Example/Pods/Nocilla/Nocilla/Matchers/NSString+Matcheable.m new file mode 100644 index 000000000..67809e0af --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Matchers/NSString+Matcheable.m @@ -0,0 +1,10 @@ +#import "NSString+Matcheable.h" +#import "LSStringMatcher.h" + +@implementation NSString (Matcheable) + +- (LSMatcher *)matcher { + return [[LSStringMatcher alloc] initWithString:self]; +} + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Model/LSHTTPBody.h b/Example/Pods/Nocilla/Nocilla/Model/LSHTTPBody.h new file mode 100644 index 000000000..8c26687f5 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Model/LSHTTPBody.h @@ -0,0 +1,5 @@ +#import + +@protocol LSHTTPBody +- (NSData *)data; +@end diff --git a/Example/Pods/Nocilla/Nocilla/Model/LSHTTPRequest.h b/Example/Pods/Nocilla/Nocilla/Model/LSHTTPRequest.h new file mode 100644 index 000000000..f0e796614 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Model/LSHTTPRequest.h @@ -0,0 +1,10 @@ +#import + +@protocol LSHTTPRequest + +@property (nonatomic, strong, readonly) NSURL *url; +@property (nonatomic, strong, readonly) NSString *method; +@property (nonatomic, strong, readonly) NSDictionary *headers; +@property (nonatomic, strong, readonly) NSData *body; + +@end diff --git a/Example/Pods/Nocilla/Nocilla/Model/LSHTTPResponse.h b/Example/Pods/Nocilla/Nocilla/Model/LSHTTPResponse.h new file mode 100644 index 000000000..db643b70a --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Model/LSHTTPResponse.h @@ -0,0 +1,7 @@ +#import + +@protocol LSHTTPResponse +@property (nonatomic, assign, readonly) NSInteger statusCode; +@property (nonatomic, strong, readonly) NSDictionary *headers; +@property (nonatomic, strong, readonly) NSData *body; +@end diff --git a/Example/Pods/Nocilla/Nocilla/Nocilla.h b/Example/Pods/Nocilla/Nocilla/Nocilla.h new file mode 100644 index 000000000..e86b640ae --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Nocilla.h @@ -0,0 +1,26 @@ +// +// Nocilla.h +// Nocilla +// +// Created by Robert Böhnke on 26/03/15. +// Copyright (c) 2015 Luis Solano Bonet. All rights reserved. +// + +#import + +//! Project version number for Nocilla. +FOUNDATION_EXPORT double NocillaVersionNumber; + +//! Project version string for Nocilla. +FOUNDATION_EXPORT const unsigned char NocillaVersionString[]; + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import diff --git a/Example/Pods/Nocilla/Nocilla/Stubs/LSStubRequest.h b/Example/Pods/Nocilla/Nocilla/Stubs/LSStubRequest.h new file mode 100644 index 000000000..4a2cfe3fc --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Stubs/LSStubRequest.h @@ -0,0 +1,24 @@ +#import +#import "LSStubResponse.h" +#import "LSHTTPRequest.h" + + +@class LSMatcher; +@class LSStubRequest; +@class LSStubResponse; + +@interface LSStubRequest : NSObject +@property (nonatomic, strong, readonly) NSString *method; +@property (nonatomic, strong, readonly) LSMatcher *urlMatcher; +@property (nonatomic, strong, readonly) NSDictionary *headers; +@property (nonatomic, strong, readwrite) LSMatcher *body; + +@property (nonatomic, strong) LSStubResponse *response; + +- (instancetype)initWithMethod:(NSString *)method url:(NSString *)url; +- (instancetype)initWithMethod:(NSString *)method urlMatcher:(LSMatcher *)urlMatcher; + +- (void)setHeader:(NSString *)header value:(NSString *)value; + +- (BOOL)matchesRequest:(id)request; +@end diff --git a/Example/Pods/Nocilla/Nocilla/Stubs/LSStubRequest.m b/Example/Pods/Nocilla/Nocilla/Stubs/LSStubRequest.m new file mode 100644 index 000000000..b97b73a28 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Stubs/LSStubRequest.m @@ -0,0 +1,97 @@ +#import "LSStubRequest.h" +#import "LSMatcher.h" +#import "NSString+Matcheable.h" + +@interface LSStubRequest () +@property (nonatomic, strong, readwrite) NSString *method; +@property (nonatomic, strong, readwrite) LSMatcher *urlMatcher; +@property (nonatomic, strong, readwrite) NSMutableDictionary *mutableHeaders; + +-(BOOL)matchesMethod:(id)request; +-(BOOL)matchesURL:(id)request; +-(BOOL)matchesHeaders:(id)request; +-(BOOL)matchesBody:(id)request; +@end + +@implementation LSStubRequest + +- (instancetype)initWithMethod:(NSString *)method url:(NSString *)url { + return [self initWithMethod:method urlMatcher:[url matcher]]; +} + +- (instancetype)initWithMethod:(NSString *)method urlMatcher:(LSMatcher *)urlMatcher; { + self = [super init]; + if (self) { + self.method = method; + self.urlMatcher = urlMatcher; + self.mutableHeaders = [NSMutableDictionary dictionary]; + } + return self; +} + +- (void)setHeader:(NSString *)header value:(NSString *)value { + [self.mutableHeaders setValue:value forKey:header]; +} + +- (NSDictionary *)headers { + return [NSDictionary dictionaryWithDictionary:self.mutableHeaders];; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"StubRequest:\nMethod: %@\nURL: %@\nHeaders: %@\nBody: %@\nResponse: %@", + self.method, + self.urlMatcher, + self.headers, + self.body, + self.response]; +} + +- (LSStubResponse *)response { + if (!_response) { + _response = [[LSStubResponse alloc] initDefaultResponse]; + } + return _response; + +} + +- (BOOL)matchesRequest:(id)request { + if ([self matchesMethod:request] + && [self matchesURL:request] + && [self matchesHeaders:request] + && [self matchesBody:request] + ) { + return YES; + } + return NO; +} + +-(BOOL)matchesMethod:(id)request { + if (!self.method || [self.method isEqualToString:request.method]) { + return YES; + } + return NO; +} + +-(BOOL)matchesURL:(id)request { + return [self.urlMatcher matches:[request.url absoluteString]]; +} + +-(BOOL)matchesHeaders:(id)request { + for (NSString *header in self.headers) { + if (![[request.headers objectForKey:header] isEqualToString:[self.headers objectForKey:header]]) { + return NO; + } + } + return YES; +} + +-(BOOL)matchesBody:(id)request { + NSData *reqBody = request.body; + if (!self.body || [self.body matchesData:reqBody]) { + return YES; + } + return NO; +} +@end + + diff --git a/Example/Pods/Nocilla/Nocilla/Stubs/LSStubResponse.h b/Example/Pods/Nocilla/Nocilla/Stubs/LSStubResponse.h new file mode 100644 index 000000000..d0461db83 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Stubs/LSStubResponse.h @@ -0,0 +1,18 @@ +#import +#import "LSHTTPResponse.h" + +@interface LSStubResponse : NSObject + +@property (nonatomic, assign, readonly) NSInteger statusCode; +@property (nonatomic, strong) NSData *body; +@property (nonatomic, strong, readonly) NSDictionary *headers; + +@property (nonatomic, assign, readonly) BOOL shouldFail; +@property (nonatomic, strong, readonly) NSError *error; + +- (id)initWithError:(NSError *)error; +- (id)initWithStatusCode:(NSInteger)statusCode; +- (id)initWithRawResponse:(NSData *)rawResponseData; +- (id)initDefaultResponse; +- (void)setHeader:(NSString *)header value:(NSString *)value; +@end diff --git a/Example/Pods/Nocilla/Nocilla/Stubs/LSStubResponse.m b/Example/Pods/Nocilla/Nocilla/Stubs/LSStubResponse.m new file mode 100644 index 000000000..06f67c758 --- /dev/null +++ b/Example/Pods/Nocilla/Nocilla/Stubs/LSStubResponse.m @@ -0,0 +1,81 @@ +#import "LSStubResponse.h" + +@interface LSStubResponse () +@property (nonatomic, assign, readwrite) NSInteger statusCode; +@property (nonatomic, strong) NSMutableDictionary *mutableHeaders; +@property (nonatomic, assign) UInt64 offset; +@property (nonatomic, assign, getter = isDone) BOOL done; +@property (nonatomic, assign) BOOL shouldFail; +@property (nonatomic, strong) NSError *error; +@end + +@implementation LSStubResponse + +#pragma Initializers +- (id)initDefaultResponse { + self = [super init]; + if (self) { + self.shouldFail = NO; + + self.statusCode = 200; + self.mutableHeaders = [NSMutableDictionary dictionary]; + self.body = [@"" dataUsingEncoding:NSUTF8StringEncoding]; + } + return self; +} + + +- (id)initWithError:(NSError *)error { + self = [super init]; + if (self) { + self.shouldFail = YES; + self.error = error; + } + return self; +} + +-(id)initWithStatusCode:(NSInteger)statusCode { + self = [super init]; + if (self) { + self.shouldFail = NO; + self.statusCode = statusCode; + self.mutableHeaders = [NSMutableDictionary dictionary]; + self.body = [@"" dataUsingEncoding:NSUTF8StringEncoding]; + } + return self; +} + +- (id)initWithRawResponse:(NSData *)rawResponseData { + self = [self initDefaultResponse]; + if (self) { + CFHTTPMessageRef httpMessage = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, FALSE); + if (httpMessage) { + CFHTTPMessageAppendBytes(httpMessage, [rawResponseData bytes], [rawResponseData length]); + + self.body = rawResponseData; // By default + + if (CFHTTPMessageIsHeaderComplete(httpMessage)) { + self.statusCode = (NSInteger)CFHTTPMessageGetResponseStatusCode(httpMessage); + self.mutableHeaders = [NSMutableDictionary dictionaryWithDictionary:(__bridge_transfer NSDictionary *)CFHTTPMessageCopyAllHeaderFields(httpMessage)]; + self.body = (__bridge_transfer NSData *)CFHTTPMessageCopyBody(httpMessage); + } + CFRelease(httpMessage); + } + } + return self; +} + +- (void)setHeader:(NSString *)header value:(NSString *)value { + [self.mutableHeaders setValue:value forKey:header]; +} +- (NSDictionary *)headers { + return [NSDictionary dictionaryWithDictionary:self.mutableHeaders]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"StubRequest:\nStatus Code: %ld\nHeaders: %@\nBody: %@", + (long)self.statusCode, + self.mutableHeaders, + self.body]; +} +@end diff --git a/Example/Pods/Nocilla/README.md b/Example/Pods/Nocilla/README.md new file mode 100644 index 000000000..6e18b8d1b --- /dev/null +++ b/Example/Pods/Nocilla/README.md @@ -0,0 +1,193 @@ +# Nocilla [![CI Status](http://img.shields.io/travis/luisobo/Nocilla.svg?style=flat&branch=master)](https://travis-ci.org/luisobo/Nocilla)[![Version](https://img.shields.io/cocoapods/v/Nocilla.svg?style=flat)](http://cocoadocs.org/docsets/Nocilla)[![License](https://img.shields.io/cocoapods/l/Nocilla.svg?style=flat)](http://cocoadocs.org/docsets/Nocilla)[![Platform](https://img.shields.io/cocoapods/p/Nocilla.svg?style=flat)](http://cocoadocs.org/docsets/Nocilla) + +Stunning HTTP stubbing for iOS and OS X. Testing HTTP requests has never been easier. + +This library was inspired by [WebMock](https://github.com/bblimke/webmock) and it's using [this approach](http://www.infinite-loop.dk/blog/2011/09/using-nsurlprotocol-for-injecting-test-data/) to stub the requests. + +## Features +* Stub HTTP and HTTPS requests in your unit tests. +* Supports NSURLConnection, NSURLSession and ASIHTTPRequest. +* Awesome DSL that will improve the readability and maintainability of your tests. +* Match requests with regular expressions. +* Stub requests with errors. +* Tested. +* Fast. +* Extendable to support more HTTP libraries. + +## Installation +### As a [CocoaPod](http://cocoapods.org/) +Just add this to your Podfile +```ruby +pod 'Nocilla' +``` + +### Other approaches +* You should be able to add Nocilla to you source tree. If you are using git, consider using a `git submodule` + +## Usage +_Yes, the following code is valid Objective-C, or at least, it should be_ + +The following examples are described using [Kiwi](https://github.com/kiwi-bdd/Kiwi) + +### Common parts +Until Nocilla can hook directly into Kiwi, you will have to include the following snippet in the specs you want to use Nocilla: + +```objc +#import "Kiwi.h" +#import "Nocilla.h" +SPEC_BEGIN(ExampleSpec) +beforeAll(^{ + [[LSNocilla sharedInstance] start]; +}); +afterAll(^{ + [[LSNocilla sharedInstance] stop]; +}); +afterEach(^{ + [[LSNocilla sharedInstance] clearStubs]; +}); + +it(@"should do something", ^{ + // Stub here! +}); +SPEC_END +``` + +### Stubbing requests +#### Stubbing a simple request +It will return the default response, which is a 200 and an empty body. + +```objc +stubRequest(@"GET", @"http://www.google.com"); +``` + +#### Stubbing requests with regular expressions +```objc +stubRequest(@"GET", @"^http://(.*?)\\.example\\.com/v1/dogs\\.json".regex); +``` + + +#### Stubbing a request with a particular header + +```objc +stubRequest(@"GET", @"https://api.example.com"). +withHeader(@"Accept", @"application/json"); +``` + +#### Stubbing a request with multiple headers + +Using the `withHeaders` method makes sense with the Objective-C literals, but it accepts an NSDictionary. + +```objc +stubRequest(@"GET", @"https://api.example.com/dogs.json"). +withHeaders(@{@"Accept": @"application/json", @"X-CUSTOM-HEADER": @"abcf2fbc6abgf"}); +``` + +#### Stubbing a request with a particular body + +```objc +stubRequest(@"POST", @"https://api.example.com/dogs.json"). +withHeaders(@{@"Accept": @"application/json", @"X-CUSTOM-HEADER": @"abcf2fbc6abgf"}). +withBody(@"{\"name\":\"foo\"}"); +``` + +You can also use `NSData` for the request body: + +```objc +stubRequest(@"POST", @"https://api.example.com/dogs.json"). +withHeaders(@{@"Accept": @"application/json", @"X-CUSTOM-HEADER": @"abcf2fbc6abgf"}). +withBody([@"foo" dataUsingEncoding:NSUTF8StringEncoding]); +``` + +It even works with regular expressions! + +```objc +stubRequest(@"POST", @"https://api.example.com/dogs.json"). +withHeaders(@{@"Accept": @"application/json", @"X-CUSTOM-HEADER": @"abcf2fbc6abgf"}). +withBody(@"^The body start with this".regex); +``` + +#### Returning a specific status code +```objc +stubRequest(@"GET", @"http://www.google.com").andReturn(404); +``` + +#### Returning a specific status code and header +The same approch here, you can use `withHeader` or `withHeaders` + +```objc +stubRequest(@"POST", @"https://api.example.com/dogs.json"). +andReturn(201). +withHeaders(@{@"Content-Type": @"application/json"}); +``` + +#### Returning a specific status code, headers and body +```objc +stubRequest(@"GET", @"https://api.example.com/dogs.json"). +andReturn(201). +withHeaders(@{@"Content-Type": @"application/json"}). +withBody(@"{\"ok\":true}"); +``` + +You can also use `NSData` for the response body: + +```objc +stubRequest(@"GET", @"https://api.example.com/dogs.json"). +andReturn(201). +withHeaders(@{@"Content-Type": @"application/json"}). +withBody([@"bar" dataUsingEncoding:NSUTF8StringEncoding]); +``` + +#### Returning raw responses recorded with `curl -is` +`curl -is http://api.example.com/dogs.json > /tmp/example_curl_-is_output.txt` + +```objc +stubRequest(@"GET", @"https://api.example.com/dogs.json"). +andReturnRawResponse([NSData dataWithContentsOfFile:@"/tmp/example_curl_-is_output.txt"]); +``` + +#### All together +```objc +stubRequest(@"POST", @"https://api.example.com/dogs.json"). +withHeaders(@{@"Accept": @"application/json", @"X-CUSTOM-HEADER": @"abcf2fbc6abgf"}). +withBody(@"{\"name\":\"foo\"}"). +andReturn(201). +withHeaders(@{@"Content-Type": @"application/json"}). +withBody(@"{\"ok\":true}"); +``` + +#### Making a request fail +This will call the failure handler (callback, delegate... whatever your HTTP client uses) with the specified error. + +```objc +stubRequest(@"POST", @"https://api.example.com/dogs.json"). +withHeaders(@{@"Accept": @"application/json", @"X-CUSTOM-HEADER": @"abcf2fbc6abgf"}). +withBody(@"{\"name\":\"foo\"}"). +andFailWithError([NSError errorWithDomain:@"foo" code:123 userInfo:nil]); +``` + +### Unexpected requests +If some request is made but it wasn't stubbed, Nocilla won't let that request hit the real world. In that case your test should fail. +At this moment Nocilla will raise an exception with a meaningful message about the error and how to solve it, including a snippet of code on how to stub the unexpected request. + +## Who uses Nocilla. + +### Submit a PR to add your company here! + +- [Groupon](http://www.groupon.com) +- [Pixable](http://www.pixable.com) +- [Jackthreads](https://www.jackthreads.com) +- [ShopKeep](http://www.shopkeep.com) +- [Venmo](https://www.venmo.com) +- [Lighthouse](http://www.lighthouselabs.co.uk) + +## Other alternatives +* [ILTesting](https://github.com/InfiniteLoopDK/ILTesting) +* [OHHTTPStubs](https://github.com/AliSoftware/OHHTTPStubs) + +## Contributing + +1. Fork it +2. Create your feature branch +3. Commit your changes +4. Push to the branch +5. Create new Pull Request diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 3f5fda91d..448151a78 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,389 +7,527 @@ objects = { /* Begin PBXBuildFile section */ - 0C6FF91EB1F0391ED75DC72D31D159EF /* EXPMatchers+beTruthy.m in Sources */ = {isa = PBXBuildFile; fileRef = 408EA78FA928332DAE21B1527BCC7A2F /* EXPMatchers+beTruthy.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 0D16B556212D317A0D4FEB71E102E207 /* EXPMatchers+beLessThan.h in Headers */ = {isa = PBXBuildFile; fileRef = 42EC02837F7465B7AED8E1A256D57C91 /* EXPMatchers+beLessThan.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0EBFA5FBE4953A83B677CE2A75746761 /* EXPMatchers+beLessThan.m in Sources */ = {isa = PBXBuildFile; fileRef = 983F42157C09B24C95033E6A987BBF22 /* EXPMatchers+beLessThan.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 0F94F5B0ABB3252B9275B7C129EC7A26 /* EXPMatchers+equal.h in Headers */ = {isa = PBXBuildFile; fileRef = FBF30858E3C4F8F822AB008755EC09E9 /* EXPMatchers+equal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 11C1AEB289C1EB80089349B71F09D04B /* EXPMatchers+raiseWithReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 65DA28E34D6B2634B0D3632970B9AFD0 /* EXPMatchers+raiseWithReason.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1312A7D381C51428CF481E33E3D37901 /* EXPMatchers+beGreaterThan.m in Sources */ = {isa = PBXBuildFile; fileRef = 91D17A7188630D4CFFDF216D1B20AD98 /* EXPMatchers+beGreaterThan.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 131532787AD40BE1F35DF288D2E6FFD7 /* EXPMatchers+beInTheRangeOf.h in Headers */ = {isa = PBXBuildFile; fileRef = AA2D86876643D2803FBF58BD3C0BE625 /* EXPMatchers+beInTheRangeOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17572374B2AE183C6347C41E8DF8E579 /* EXPMatchers+beFalsy.m in Sources */ = {isa = PBXBuildFile; fileRef = E156AF9341293266845AA8774ED518EA /* EXPMatchers+beFalsy.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 183609639E124198767341441931D06D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAC405455F8E20BD0434D9D3E3D2879A /* Foundation.framework */; }; - 1A1AB2EC52323C5EA28DAA99F1E1A90D /* EXPMatchers+endWith.h in Headers */ = {isa = PBXBuildFile; fileRef = 177EE8E7DD8C4226F8E15FE4C447154D /* EXPMatchers+endWith.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1AB3304B6884F626BC54150AC7565E18 /* EXPMatchers+equal.m in Sources */ = {isa = PBXBuildFile; fileRef = A1000A875D63BCF2E590201DB9EE9499 /* EXPMatchers+equal.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 1AFCE591ADF942CC1D7201001DDA166C /* UIViewController+SEGScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 231107913CCC73928F45805FECF6CF28 /* UIViewController+SEGScreen.m */; }; - 1B0389CD88AA949B34DC7269030FEC6F /* EXPMatchers+beGreaterThanOrEqualTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CF861D2ADFE89409C39B6E076059DCE /* EXPMatchers+beGreaterThanOrEqualTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 201BF9C605852822CA5A65ADE282A310 /* EXPMatcherHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 78F5D31437776FFE9BBCAE5FD37C912E /* EXPMatcherHelpers.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 204D694B03BFF3B244A6AB73FACFFC43 /* Expecta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FD3A245D75F8D2D0FFAD5230F5925974 /* Expecta-dummy.m */; }; + 00CBED9954E20CEAFAB62EBC2C6D1AC2 /* SEGAnalyticsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DBFFD1B512B8783254B83EE9779BDF /* SEGAnalyticsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01304C20BC2C7E959D452DF9D0FAD0B6 /* Specta.h in Headers */ = {isa = PBXBuildFile; fileRef = 41657CB8575AD4F6ED3C41808EFBAAFF /* Specta.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 017FA696C155C9139B23611A54C315A9 /* SEGTrackPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = C94F72101EEBF1EDE5E101FC2E6AA35B /* SEGTrackPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 02F6B0D7B86AB56F90307DB23E661896 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 348E28395AC3E9B59263F66C9B316799 /* XCTest.framework */; }; + 036DC31354B4DFA82ABC0D96D68D1DF6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */; }; + 03B1EC3A856CCA8E9363490D1EC67402 /* SEGLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE3D70C67390C71AD4017AC6A272273A /* SEGLocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05FC69F940FABFD8407DB2C7C300EEE4 /* SPTExampleGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 420D34612C84353D8EE232B5BE7A6593 /* SPTExampleGroup.m */; }; + 08D3436DDB71F2C2250BBDFBE80B2D23 /* LSStubRequestDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EE6D868687E658E956E0558A26DCF81 /* LSStubRequestDSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0C6FF91EB1F0391ED75DC72D31D159EF /* EXPMatchers+beTruthy.m in Sources */ = {isa = PBXBuildFile; fileRef = 035E9D6E0275BCAFD58AF47623DB22DF /* EXPMatchers+beTruthy.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 0D16B556212D317A0D4FEB71E102E207 /* EXPMatchers+beLessThan.h in Headers */ = {isa = PBXBuildFile; fileRef = F4E609243D8AB1B2E70A8F2C5E9F7186 /* EXPMatchers+beLessThan.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0D96C808906230C689C8310AC8E7DF5B /* LSNSURLSessionHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 25F5A3115A623DA04AA16CFEC74F2EF9 /* LSNSURLSessionHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0EBFA5FBE4953A83B677CE2A75746761 /* EXPMatchers+beLessThan.m in Sources */ = {isa = PBXBuildFile; fileRef = 90FBD137D0DEDCABC737FF2FDFBEFCBA /* EXPMatchers+beLessThan.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 0F94F5B0ABB3252B9275B7C129EC7A26 /* EXPMatchers+equal.h in Headers */ = {isa = PBXBuildFile; fileRef = 367CD2B562A7D4E32D8B08A63DA602ED /* EXPMatchers+equal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 100973774AE7C50C13731F5A56EDB0A7 /* SEGHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = ABD3A8A2E5C2D705B3B2F976221E6748 /* SEGHTTPClient.m */; }; + 11C1AEB289C1EB80089349B71F09D04B /* EXPMatchers+raiseWithReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D97130E4590D9EBE6FDAE4AFCA402B /* EXPMatchers+raiseWithReason.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1277359C8D8BB837B24617969BAAC9DF /* NSRegularExpression+Matcheable.m in Sources */ = {isa = PBXBuildFile; fileRef = BE47DB6B3284121632123362631DE174 /* NSRegularExpression+Matcheable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 128B9A07E9D0F95B28E5F1F3483CB7EA /* LSASIHTTPRequestAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = F99FFAD3309B4F39F8BE9FF058F500C0 /* LSASIHTTPRequestAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1312A7D381C51428CF481E33E3D37901 /* EXPMatchers+beGreaterThan.m in Sources */ = {isa = PBXBuildFile; fileRef = BD444BE7AACE3345E729ED0A7EE2E468 /* EXPMatchers+beGreaterThan.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 131532787AD40BE1F35DF288D2E6FFD7 /* EXPMatchers+beInTheRangeOf.h in Headers */ = {isa = PBXBuildFile; fileRef = C65D93644F144030CDCAB432512075EB /* EXPMatchers+beInTheRangeOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 15A7217C749314E8423F3C36A99BAF7A /* LSHTTPStubURLProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = B7F90B078EAD016D3617F5FA13AD0878 /* LSHTTPStubURLProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 16325200AF77954D55A5F9F56A6433F5 /* LSRegexMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E4A58CAACBA17AEF72394FEA6AA92DE2 /* LSRegexMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 17572374B2AE183C6347C41E8DF8E579 /* EXPMatchers+beFalsy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B15D02A719ABC18B697A175F171D199 /* EXPMatchers+beFalsy.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 183609639E124198767341441931D06D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */; }; + 1A1AB2EC52323C5EA28DAA99F1E1A90D /* EXPMatchers+endWith.h in Headers */ = {isa = PBXBuildFile; fileRef = DA87C31144BB044ECD47FB6C44ACB2CC /* EXPMatchers+endWith.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1AB3304B6884F626BC54150AC7565E18 /* EXPMatchers+equal.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A007F3F3B0E1BA3EA6F01CF4311AA2 /* EXPMatchers+equal.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 1B0389CD88AA949B34DC7269030FEC6F /* EXPMatchers+beGreaterThanOrEqualTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 52DDA6BC21D08377214BCAF012289DF5 /* EXPMatchers+beGreaterThanOrEqualTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 1D70460708A86CB706BFAD0E12C41EE2 /* XCTest+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E69917134319E650F4C9F5269A7FDDA /* XCTest+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 201BF9C605852822CA5A65ADE282A310 /* EXPMatcherHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = DECB1E291A2275FD038BDF383541831A /* EXPMatcherHelpers.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 204D694B03BFF3B244A6AB73FACFFC43 /* Expecta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D7E90431DC0B8E1E7403353232CC41A /* Expecta-dummy.m */; }; 205D2E281F68A223DBB09262E9514D41 /* Pods-Analytics_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B12869C98411D50EACF87FAC7CCADD0 /* Pods-Analytics_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 20FD0EB3085EB24A46CA01643A455A58 /* SPTCompiledExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DF8BC2C6730675F74DD28A442535501 /* SPTCompiledExample.m */; }; - 246D2F361A885D4A65992B44672B8F71 /* Specta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A2ABBE8261195A55ED1DFF9A59897512 /* Specta-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 260BC7EED9289AF321A6F791964CE472 /* EXPMatchers+respondTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 82018E76DBBAA11465301FB7614DA196 /* EXPMatchers+respondTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2916A0606136A9DC67F2463AB230868B /* EXPMatchers+match.h in Headers */ = {isa = PBXBuildFile; fileRef = 36BB29C27B61C055294A8316529A8EF8 /* EXPMatchers+match.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2C0A8737FDB9B9C6A6BDF437FD11334C /* EXPMatchers+beNil.m in Sources */ = {isa = PBXBuildFile; fileRef = 93B613869003A3D21F03ECEADC589822 /* EXPMatchers+beNil.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 2CA1AD3A7559BEDC1B5E5C1D210D7C06 /* SpectaDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FF67CD313329AC05B39AE251B5EA5BB /* SpectaDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2CFE2898496C1C7096DB8DA43AF19103 /* EXPMatchers+raise.m in Sources */ = {isa = PBXBuildFile; fileRef = A125E7E80B5C2A367F184455B08495B1 /* EXPMatchers+raise.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 2D0294A1F074AD370FDFE53FF14199AC /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B89BF7315BAB3516AF2A51041DC39C3B /* XCTest.framework */; }; - 2E14619153A453BB8DF389FB6EA147BE /* ExpectaObject.h in Headers */ = {isa = PBXBuildFile; fileRef = AF080460DC05A5A144E6CAC1177FB0AC /* ExpectaObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2F427490ACABC4408D57CC0592276678 /* EXPDoubleTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = DA5EBB318D16AE6EC1958DC8510C228D /* EXPDoubleTuple.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2F733901343F8E948A2C140EFA3C3898 /* SEGTrackPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = C94F72101EEBF1EDE5E101FC2E6AA35B /* SEGTrackPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34B6E9A30603BEBBD87BA535B7D384CA /* EXPMatchers+beInstanceOf.h in Headers */ = {isa = PBXBuildFile; fileRef = A31DB2F213B606BBB124F2A6D10D8417 /* EXPMatchers+beInstanceOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 352F0F489C91C8E428D9B38A7B265341 /* SpectaUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = C7A1FE2006A967BE06886C450214BDFE /* SpectaUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3630F674338226E1F70B2B375C84374C /* SEGStoreKitTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 084806D4CE744B86C95FBEF56EC7529E /* SEGStoreKitTracker.m */; }; - 372F7A9CCE59CE86316CF436F832A3FC /* EXPMatchers+beGreaterThanOrEqualTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 592E81109E597E27A3D9DBB86ABBE590 /* EXPMatchers+beGreaterThanOrEqualTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37A2D0F8493469EF2495FC689440F079 /* EXPMatchers+beLessThanOrEqualTo.h in Headers */ = {isa = PBXBuildFile; fileRef = C849D7BC23725EC2DCDC9EB803322052 /* EXPMatchers+beLessThanOrEqualTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 397B320B7C59C168CC5B62E18ED8DEA0 /* EXPMatchers+beSubclassOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F5CF0D3894D4FC1B84CF0F527D0D766 /* EXPMatchers+beSubclassOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B4A74B27C8CC228A90A3E3293E5EFCB /* SEGAnalyticsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = E80C69D4C37874C32C5E8031C34B1E9F /* SEGAnalyticsUtils.m */; }; - 3B5B7495707BF7133B9FB3F834045611 /* EXPBlockDefinedMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 04D6221AD6AD261B601F9711E749A5D5 /* EXPBlockDefinedMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C2700C7DAA15C6AF84A595865C42F4D /* EXPMatchers+contain.h in Headers */ = {isa = PBXBuildFile; fileRef = AE94674608619558EA8DCEBE8902C148 /* EXPMatchers+contain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C30F1B5891B36BF5EE5EEDF1479CF75 /* SPTCallSite.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BBCCE13322F42620459D20E8DE3673 /* SPTCallSite.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3EB892FEFED02B2B9A7D8A6ED7442B5A /* SPTExampleGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = DAACC7B2EAAA76EAB129F3A5D74DDC18 /* SPTExampleGroup.m */; }; - 403292D82DA62291204BF59524BC4EDB /* EXPMatchers+haveCountOf.m in Sources */ = {isa = PBXBuildFile; fileRef = F3841AF1D8E631E333341008419AF1A1 /* EXPMatchers+haveCountOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 42B6B3A4B277D7AEEA103D37BCB8BAB3 /* SEGAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B18B8410C6425F24B866CBDB74CABBF /* SEGAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 46137F5CC368BF38BAF0D0AF81DD8FFE /* EXPMatchers+raise.h in Headers */ = {isa = PBXBuildFile; fileRef = 33C929F06DEC760FA0B134E8F8D1C9FA /* EXPMatchers+raise.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 471FD4F68E27AB26FA2AEBB8B245CEE4 /* NSValue+Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = DEB33EA3C18646B1DA6384B7C356C458 /* NSValue+Expecta.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4BBCBB9D8EF0B241A4A4FE4982985481 /* ExpectaSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 924BF15B0F1D99CAD6E46F0030F50C50 /* ExpectaSupport.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 5137B3CF5E11FE408C2E2805BC216AE0 /* SPTTestSuite.m in Sources */ = {isa = PBXBuildFile; fileRef = 113855CF66A69F6876546E978AC2362E /* SPTTestSuite.m */; }; - 51DDDB0FB4899757CF6A826B531B940D /* EXPUnsupportedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BE369528DB94DD9FD6880DCFAAAAB69 /* EXPUnsupportedObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5361FFBBC190D31CCF03DC91093A8064 /* SpectaDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 621D45D57ACA8E38D852A1E07D2AD679 /* SpectaDSL.m */; }; - 592ACEA76515938507B7DCE4D6597A1F /* XCTestCase+Specta.m in Sources */ = {isa = PBXBuildFile; fileRef = ABE29471E8953384B36B17DC33FB8C75 /* XCTestCase+Specta.m */; }; - 595FC1CF9EC3D417BB6CE1564B2B04B1 /* SEGScreenPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 302868B704DAA2DFE9B11259778B473E /* SEGScreenPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B1FC5269751A6F7DE56B57668258542 /* SEGStoreKitTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B1E626267775D65C6AD256FD479FC31 /* SEGStoreKitTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B2D4A621D3DA971A474776AF36BB073 /* EXPBlockDefinedMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F67D8E8E16F0E77A2D4E5F714CEBC41 /* EXPBlockDefinedMatcher.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 5B809E0476B1ABE6733964E952E8BC74 /* SEGReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = D5D7227899132DD711C9B9CF93BD9208 /* SEGReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B956D6A8DB5A9479FCCC04741602BEF /* SEGGroupPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D7B595DA38C7DFC60F78642C2073770 /* SEGGroupPayload.m */; }; - 5EA7043FE10E75D02F3C3052AF8B8318 /* EXPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D742C36417083F91C50620C170817D1 /* EXPDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 62F985F89E0DF60B306DFD34FD661EFD /* SEGSegmentIntegrationFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9449B56E5FC45BBA8F1D84C3F67E2440 /* SEGSegmentIntegrationFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 65BC31095CCDFC80CBF6BBA843751F23 /* EXPMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A21F86A69C9F106AA92ADFA3CD7C46C /* EXPMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 66A27898E989A3FA5C15AA671C4536F0 /* EXPMatchers+beIdenticalTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 279DF95762E948BE7B719A7F673E9E56 /* EXPMatchers+beIdenticalTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 67459AD239EF669A365519E06B45DCFE /* EXPExpect.h in Headers */ = {isa = PBXBuildFile; fileRef = 67473F09A0FADF52D476EA88F48CFA54 /* EXPExpect.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6A1BB5F0BE686B3085C53E653CAB9373 /* SEGAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = B0D090B0373B3F51B59F99A087DD9876 /* SEGAnalytics.m */; }; - 6E1D978790705E137FDE439AA68DD3AA /* EXPFloatTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = 17B271C769948413B2D6A2FA5FA661F5 /* EXPFloatTuple.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6EFC63A5CED45BB39FC79D87F2C47D6B /* EXPMatchers+beGreaterThan.h in Headers */ = {isa = PBXBuildFile; fileRef = B3BBEA8D0E2B46A33A73346032F24AAA /* EXPMatchers+beGreaterThan.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6F278423C8AE1DA47F35E374BB5B91EC /* EXPMatchers+beSupersetOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B06F4EDF054A24295A7BD524587CABC /* EXPMatchers+beSupersetOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 6FEB4F29647C348A7F92532D03A5447A /* SpectaTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F8C648CB722FE51238487FAECC1517 /* SpectaTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74D38E3369D473A7ADA9B2D3F2320B63 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAC405455F8E20BD0434D9D3E3D2879A /* Foundation.framework */; }; - 75A69577B213C9C4B99C73CD4948BAC6 /* SEGTrackPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = E207EDD9318353F4CA3E68BBD2CBFD1B /* SEGTrackPayload.m */; }; - 765F6187B18A76EABF04B454E990C910 /* SPTExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 8130E2C24D57D446CB02B745DEBFDB68 /* SPTExample.m */; }; - 76CCABE79C04444450153424D7CE1DC1 /* EXPMatchers+beSupersetOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 847A5C6956B4E31C6C348C18D4FDBEEA /* EXPMatchers+beSupersetOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 76D337327C10A7555447B69AA1562647 /* EXPMatchers+beInstanceOf.m in Sources */ = {isa = PBXBuildFile; fileRef = DF5966F05CD1198629BF447653497239 /* EXPMatchers+beInstanceOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 79558B1F97ABE4AB8942DC18BEBD4B82 /* EXPMatchers+beKindOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 186D37D789BDC5806713AC08D0BD0452 /* EXPMatchers+beKindOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B222B1CECE7CE3C44A6A10B121100E8 /* SEGBluetooth.h in Headers */ = {isa = PBXBuildFile; fileRef = BB1D4DB7517A8B41FCDACB1611E880D2 /* SEGBluetooth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B223B4E6EF14BA12DA113F7EE10B96C /* NSObject+Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF2564A5B3BCF5B727F63C626FF9935 /* NSObject+Expecta.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E80CDD6FF963AF4D0A43C8A0D9F9951 /* SPTGlobalBeforeAfterEach.h in Headers */ = {isa = PBXBuildFile; fileRef = D6CF3903D943792CF71D2E59A5FE6602 /* SPTGlobalBeforeAfterEach.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 805E425BBEF7A6133E32E1D30A073010 /* EXPExpect.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F32E405A85135EDBCBF4765A6BB530B /* EXPExpect.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 837B593D7C1D01B4EA400247309D6AB0 /* Expecta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D6BE4E35D0AA9FEFC1DA27890CBA2A19 /* Expecta-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 842611E25618260A2EC7DB1C7D96A8AB /* SEGScreenPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 354E53CA2386704D8DB4A48EF2CF11E5 /* SEGScreenPayload.m */; }; - 84A1E9622EDC1FA0E2329F8BC867894F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAC405455F8E20BD0434D9D3E3D2879A /* Foundation.framework */; }; - 85E31076D5530AEEB45ACF16B2B8A983 /* EXPMatchers.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AFD77F6B582228E3C05EB3F700225A9 /* EXPMatchers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 85EB2F216487CB2E8F3FCCFBC4D69912 /* EXPMatchers+beTruthy.h in Headers */ = {isa = PBXBuildFile; fileRef = 67324AA26715C0742B62E59D0AAB374C /* EXPMatchers+beTruthy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8717FA98BAD347950B617AF5D881624C /* SEGIdentifyPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E64EA832A59F14879437B3965DD8C35 /* SEGIdentifyPayload.m */; }; - 87AAFB58F287E16F46FE4FDB84B342BC /* NSData+GZIP.m in Sources */ = {isa = PBXBuildFile; fileRef = 50FE9A09D0B93D03944E207CDDE1B51F /* NSData+GZIP.m */; }; - 87BE4DBA7760C7E499C45A451F60FEE6 /* Analytics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F8115C1476FCC21E22C39FDAC8BB6EB8 /* Analytics-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87FD5F0F682CDEB6A348CA448889E3EA /* EXPMatchers+beKindOf.m in Sources */ = {isa = PBXBuildFile; fileRef = E8CC760F73E42A321D6401C619837229 /* EXPMatchers+beKindOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 8C863DAD4DCD58BABD441F87BC34D437 /* SEGAnalyticsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A9CB1F11CBD9FB136A49748F09C22C3 /* SEGAnalyticsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8C8C1B0D83FE6A4352F15154DB16372C /* EXPMatcherHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 27576C638FD3AB691E7F4FB1E3980464 /* EXPMatcherHelpers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8DDC7B7A80772A05340D70220AE58160 /* SEGIdentifyPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = D41DBD56C412C840D2090A4BF5CC6023 /* SEGIdentifyPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8F2F51C2FC6CEB5E34AAA7FC4EA7BA08 /* SEGLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F210E4EBA55847B7DD2D64D2AE9699D /* SEGLocation.m */; }; - 90491F90B4D48E6E2E8BFC983D4DBA6B /* SPTExcludeGlobalBeforeAfterEach.h in Headers */ = {isa = PBXBuildFile; fileRef = 8002AEC214B6BB97F584715F86C953D0 /* SPTExcludeGlobalBeforeAfterEach.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 918E06480F28F27361B19D19432F8538 /* EXPMatchers+endWith.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B01F350337B25F09061F55C2252CBD6 /* EXPMatchers+endWith.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 931D410B9F8ACB935883DF8C59F9C93E /* EXPMatchers+postNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 393405584126BC701B16CB695FBEC1B0 /* EXPMatchers+postNotification.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 94C47C87E397972CE98F75929F3B706C /* ExpectaObject.m in Sources */ = {isa = PBXBuildFile; fileRef = DF4D33F041C8104408EC5CD85F30D247 /* ExpectaObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 9AD8B3849C1D4220E3EE375F49FC1CB9 /* Pods-Analytics_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFDE47A271C4D8EB4957B57FD71DD6E /* Pods-Analytics_Tests-dummy.m */; }; - 9B2E761A064459F77EA9870BEF03ACC3 /* EXPMatchers+postNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 124408F448490BCF39CC1C2AA5297197 /* EXPMatchers+postNotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9BB9159FBA757600D3D4C0FF645F3911 /* EXPMatchers+beInTheRangeOf.m in Sources */ = {isa = PBXBuildFile; fileRef = ED05564542683A1E240E5097EC7B86DC /* EXPMatchers+beInTheRangeOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - A1B576DA80DC7DE7AEF75BB35F260B64 /* SEGPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = A5BA035D6043B4036AA1DDF515E27387 /* SEGPayload.m */; }; - A7C8870351721739784DAD6F9E5E443F /* SEGAliasPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = B588367A6A267BEB469E601813B6475F /* SEGAliasPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA620A8B57D6B90FB028CB32D2666AED /* SPTExampleGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = E4286F5B187014B00F18766782F7018D /* SPTExampleGroup.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ACE47CBC0ABCF3A5A51BA0984A32788E /* SEGBluetooth.m in Sources */ = {isa = PBXBuildFile; fileRef = 690736929497BF866D7685E3620A13AC /* SEGBluetooth.m */; }; - AF1F46668D4591602887998C6E9C10AD /* EXPMatchers+beCloseTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B6DF8F89EC26F944197244B9F2AAB15 /* EXPMatchers+beCloseTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AFFC8900E52BBEC72059334132F3A8F3 /* ExpectaSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = B424E5B08CAAABE851C235789EE3EC6B /* ExpectaSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B192D6173D37C3ACDCE76E8D2814B296 /* SPTSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B236E34C19DC967CCE978293BCF8C5E /* SPTSpec.m */; }; - B25F217AF652B8C0792E3E94B274D4C6 /* SEGIntegrationFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = DE36CBC163E9F3578D7D2552F1BF89DD /* SEGIntegrationFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7185ADC751C1C1B68DCE07933CF0CB5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAC405455F8E20BD0434D9D3E3D2879A /* Foundation.framework */; }; - B71CB31C8F37CC676C7622CACF23925A /* SEGReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BFC8FB92FF4E63FFC9DCD949A5A3E39 /* SEGReachability.m */; }; - B84431CF8C64F363A334AA7089F6C134 /* NSValue+Expecta.m in Sources */ = {isa = PBXBuildFile; fileRef = 2499EDF4CE48DC7D295875D373CE6ACB /* NSValue+Expecta.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - BA12B131F10BCE3BE6E9A02FC908FE9D /* EXPMatchers+beCloseTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BE4506716AF52468B3550AD5824670F /* EXPMatchers+beCloseTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - BBA91DAB31D55D672D162FCB1BA15A9F /* XCTestCase+Specta.h in Headers */ = {isa = PBXBuildFile; fileRef = C2D5F98443188468F5CFE556EC251738 /* XCTestCase+Specta.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC55C8365AEFF8217F6A567607754854 /* EXPDoubleTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = E8899DDCDB159906296A77EA9F670B8C /* EXPDoubleTuple.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - BEFFE9FFE52E9A0833A7D2D8FB67EB4D /* EXPMatchers+beSubclassOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ACF80B5A24CE07B6C736EEF474E7E9C /* EXPMatchers+beSubclassOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - C457E584C0D03D3C74FAE0BE6B4BBC8F /* SPTSharedExampleGroups.m in Sources */ = {isa = PBXBuildFile; fileRef = BF3CD05CED877C5E19CB18BA095BC724 /* SPTSharedExampleGroups.m */; }; - C607F4E62E5BF4A9FBD56A71211FC75A /* SEGIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F5B032D6C28D7D23779332687354C86 /* SEGIntegration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C6A59D1DC1DD9BA746D7B5B69E40341B /* UIViewController+SEGScreen.h in Headers */ = {isa = PBXBuildFile; fileRef = 77815596D1A590D271917C8C394280E4 /* UIViewController+SEGScreen.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9A37BFA71A015B3CC2A41A4C04854AF /* Specta.h in Headers */ = {isa = PBXBuildFile; fileRef = D61BC75AB795DFB7AE9CF80D79C1B530 /* Specta.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC851D11E424063A8E2E79C4ABADB8D9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAC405455F8E20BD0434D9D3E3D2879A /* Foundation.framework */; }; - CE3F4ECBB0BC095577D66AE50C8E604C /* EXPFloatTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = DC4CBA4D2825ED03DE841CB750862190 /* EXPFloatTuple.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CF63FD2D8FD4C6A2A67F191D3FB34385 /* Pods-Analytics_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3937A2307ECFEFDF18B81943CB85FE11 /* Pods-Analytics_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D1206E5CE692572EC607629308808C2E /* SEGSegmentIntegrationFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 82073CC8763970FDCBB483260EBE0DA1 /* SEGSegmentIntegrationFactory.m */; }; - D1C9DD674B92541CAEE0339E436AC55F /* Analytics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BE093074278010988054D4827E030ABB /* Analytics-dummy.m */; }; - D3EA08FEF9B0D811494A6EE00EEF090C /* SEGAliasPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C21E4C22CC02DA20E2540F7FACAA4E1 /* SEGAliasPayload.m */; }; - D5AE2AB949F9A3B1BD29FBCF9D35FA3F /* SEGAnalyticsRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E63DBA4A7397B4C015789AB4075AA7D /* SEGAnalyticsRequest.m */; }; - D6859D582E74062B12173D16E8468951 /* SPTTestSuite.h in Headers */ = {isa = PBXBuildFile; fileRef = AEF01BA5773CAF9B2F6768A5AEB29504 /* SPTTestSuite.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D83677C54D2226C67886A525B0B46FBE /* EXPMatchers+beLessThanOrEqualTo.m in Sources */ = {isa = PBXBuildFile; fileRef = A0E90BF1DB04C094A5015446308F5C85 /* EXPMatchers+beLessThanOrEqualTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - D8A8412776101EE9AEE35EDBE5B153C9 /* SPTCallSite.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D23EA9CCB1E421678FACAC3D02921A8 /* SPTCallSite.m */; }; - DB30F82FB1BE083D9471B965FB500CA2 /* EXPMatchers+conformTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 51F770E0A0B3B0D2789D92A52AD3ABAE /* EXPMatchers+conformTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - DB64AB3B4ADCFF24785396CE010055D9 /* SPTSharedExampleGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = 06C1DD363D5966F42C4D802641B4CEEA /* SPTSharedExampleGroups.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF466EB0F1C7BEB2406FB308ECF5DCD0 /* SPTExample.h in Headers */ = {isa = PBXBuildFile; fileRef = 68F820C46D336F1E6EB733BFC4374C51 /* SPTExample.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF771CDD2317E6867374A46307096018 /* SPTSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = A86483E009A2C30E3472D0609B2DBFFB /* SPTSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF805AA19BFFE2C8DCC830AEDF31AECE /* SEGAnalyticsRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7CCFAC1EBAA3C15A0F34140AEFF8B2 /* SEGAnalyticsRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2070701995190A07047F664492D7F156 /* LSNocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = CBE6515D380AD0A5F2B850991320F479 /* LSNocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 21B9BDF15D08F33883999509AC98847C /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 94DBD92946E86E0425D0A419D59595F6 /* CFNetwork.framework */; }; + 24B569099A40F837596002531AEBBE6C /* Nocilla-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 287BFBC3E9767165D9BCD7FD0BAD33D1 /* Nocilla-dummy.m */; }; + 260BC7EED9289AF321A6F791964CE472 /* EXPMatchers+respondTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 48E6F388DB4C94996CFDB96CF560CBF8 /* EXPMatchers+respondTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 27832B2605A37241AF9CD554C9ECB6D0 /* LSASIHTTPRequestHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F6572099C332D69E0D8AEF41D4F9F83 /* LSASIHTTPRequestHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 27FEF9B885DDC6AF516D3816141BF58B /* XCTestCase+Specta.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B69B1E64147D5B5D22E6B8CAF1955AA /* XCTestCase+Specta.m */; }; + 2916A0606136A9DC67F2463AB230868B /* EXPMatchers+match.h in Headers */ = {isa = PBXBuildFile; fileRef = 56F8D051211772210563049DD3A251E8 /* EXPMatchers+match.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C0A8737FDB9B9C6A6BDF437FD11334C /* EXPMatchers+beNil.m in Sources */ = {isa = PBXBuildFile; fileRef = C2DEF35243EE7B74E0BADE527AC8E6B0 /* EXPMatchers+beNil.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 2CFE2898496C1C7096DB8DA43AF19103 /* EXPMatchers+raise.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E0684A9A2D760E042578EB213B228AB /* EXPMatchers+raise.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 2D0294A1F074AD370FDFE53FF14199AC /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 348E28395AC3E9B59263F66C9B316799 /* XCTest.framework */; }; + 2D650B8931887E7AEAF614ED80FC8DE0 /* Pods-Analytics_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3937A2307ECFEFDF18B81943CB85FE11 /* Pods-Analytics_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2DBDF5B701DC699F0E5A0ADCFF7F3E94 /* NSURLRequest+LSHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 57F611336E125F4ECBD6F0DF8F8CB0C5 /* NSURLRequest+LSHTTPRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E14619153A453BB8DF389FB6EA147BE /* ExpectaObject.h in Headers */ = {isa = PBXBuildFile; fileRef = DCF1F5F3DBA0F14ACBD55191FE7C28E6 /* ExpectaObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2F427490ACABC4408D57CC0592276678 /* EXPDoubleTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E4C7BB766C918FEA55596360DD0B3BB /* EXPDoubleTuple.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 34B6E9A30603BEBBD87BA535B7D384CA /* EXPMatchers+beInstanceOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 323E13462D209A8AC526A27D9D767E45 /* EXPMatchers+beInstanceOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 372F7A9CCE59CE86316CF436F832A3FC /* EXPMatchers+beGreaterThanOrEqualTo.h in Headers */ = {isa = PBXBuildFile; fileRef = A32C700EBED12A89A370905134C69E44 /* EXPMatchers+beGreaterThanOrEqualTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 37A2D0F8493469EF2495FC689440F079 /* EXPMatchers+beLessThanOrEqualTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 119280D2BDDC2135EAF4BB7B955E8FAB /* EXPMatchers+beLessThanOrEqualTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 37BE7CC360317F2CBDFBAEFCE7B39E30 /* SEGReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = E99DE7F5F39C8A3CBB2529A0987A93BE /* SEGReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 386B6C6533361BFE379152A810606851 /* XCTestCase+Specta.h in Headers */ = {isa = PBXBuildFile; fileRef = D4AAAFD96AA7809B77E24852A143E81B /* XCTestCase+Specta.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 397B320B7C59C168CC5B62E18ED8DEA0 /* EXPMatchers+beSubclassOf.h in Headers */ = {isa = PBXBuildFile; fileRef = E0DAE6457BDB82C50109C4667531F696 /* EXPMatchers+beSubclassOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A82F4E68E8D3FF7D414E6073346C049 /* SPTTestSuite.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D998F787BB3D83CE6B21CA86B405B46 /* SPTTestSuite.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B4F15B3D4EBB8580874CFA87CAAB437 /* LSDataMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 048D94BE82C84555D409A93BF039EEE5 /* LSDataMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3B588A1AD8E3D88B70EF1A8D3CF519ED /* LSHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5750F85C4001818E251789B8C0029267 /* LSHTTPRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3B5B7495707BF7133B9FB3F834045611 /* EXPBlockDefinedMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 07F6FEB6A8B5B3C02B1F7AC0B1416F42 /* EXPBlockDefinedMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C2700C7DAA15C6AF84A595865C42F4D /* EXPMatchers+contain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B75167FE543EDAB22C03FFA2C43EB27 /* EXPMatchers+contain.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C380C634D63206648B6D947901FF88D /* NSData+Nocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = 58EF9D321A4473CCBF2CF307F3A716A1 /* NSData+Nocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3D760AE20F5B60809247E6328D534A80 /* SEGIdentifyPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E64EA832A59F14879437B3965DD8C35 /* SEGIdentifyPayload.m */; }; + 3E5413E2683109B752875EFE723D2227 /* SEGPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = A5BA035D6043B4036AA1DDF515E27387 /* SEGPayload.m */; }; + 3ECFA819FFF561E456D215EB6F2C7A5C /* SEGTrackPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = E207EDD9318353F4CA3E68BBD2CBFD1B /* SEGTrackPayload.m */; }; + 3EDF6A877923CA3D380A27BA221A3693 /* LSNSURLSessionHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DC44F50C0C0B23F18EEA2E4452A285E /* LSNSURLSessionHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 403292D82DA62291204BF59524BC4EDB /* EXPMatchers+haveCountOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B1D2940D8C1436462D7D6D8912D3797 /* EXPMatchers+haveCountOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 4064CF661F3AD87993F7BFD4AD26C45D /* LSMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 0381D6093D21AFDDE30CFE22F3BB680D /* LSMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 41953DAA65006204A4869C536A6B0F2A /* SPTExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B83420442E5AFA48C73D177548DC6AA /* SPTExample.m */; }; + 43271DD951A1049D87FF064A1FD87175 /* LSDataMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FF6EF9E62A9175DF61CE4FC4F0CBCF /* LSDataMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 436A0A20916A6DC135B2A053C44CA331 /* LSHTTPStubURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = ECF26B74CC2081100643793D5A3CB1CF /* LSHTTPStubURLProtocol.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 46137F5CC368BF38BAF0D0AF81DD8FFE /* EXPMatchers+raise.h in Headers */ = {isa = PBXBuildFile; fileRef = 129E0D30DA701F5E349DEA97F20661CA /* EXPMatchers+raise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 471FD4F68E27AB26FA2AEBB8B245CEE4 /* NSValue+Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = F0C23C26D420E80AD34DF7B0996B25E8 /* NSValue+Expecta.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 47E70B3C1FB83EA2A617E5CEA02735B9 /* SEGIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F5B032D6C28D7D23779332687354C86 /* SEGIntegration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49727DC45DB1C0FD0D754C89A0B39F7E /* LSNSURLHook.m in Sources */ = {isa = PBXBuildFile; fileRef = D735F936248170D1FDFD5E59888BA634 /* LSNSURLHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 49CBA94E894CB4CF83C7A8EE9711249F /* NSURLRequest+DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 56F3BF36F4B28877AED0C75CDB6C2CF9 /* NSURLRequest+DSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4B0FACF86699832CB060706698EEDA62 /* LSRegexMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = CCE7C8867802A1DE14149AD62F3983F9 /* LSRegexMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4BB2FB639E6537B6991B248520ABDD94 /* SEGAliasPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = B588367A6A267BEB469E601813B6475F /* SEGAliasPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4BBCBB9D8EF0B241A4A4FE4982985481 /* ExpectaSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = B640F7EF833538A7567F2876134FEC3C /* ExpectaSupport.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 4C33130DFD75412F3E280502FBAA0945 /* SpectaDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 952C900BA9FB23A1C1FB1A1ABFFA27EF /* SpectaDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4DEA938F1EACED5EFF9D45FD037D3BB2 /* LSHTTPRequestDiff.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C45254A956BCDEE1A509CC47D9AE828 /* LSHTTPRequestDiff.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4EF43BE713E7E9C7FD0E7AF28532E6D9 /* SEGAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B18B8410C6425F24B866CBDB74CABBF /* SEGAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51DDDB0FB4899757CF6A826B531B940D /* EXPUnsupportedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 756CD0982961FCE099DA103BA646FD59 /* EXPUnsupportedObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 52695B80D42DFB4C48D7A906478509EB /* ASIHTTPRequestStub.h in Headers */ = {isa = PBXBuildFile; fileRef = A68EE479CD32D935ECB7001FAF476988 /* ASIHTTPRequestStub.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 52E493AC179B1F738F42276D7B57E16B /* SPTTestSuite.m in Sources */ = {isa = PBXBuildFile; fileRef = 44FB4DDE2873BC99C9529F866BA25D18 /* SPTTestSuite.m */; }; + 556445BCF5C80A0C0E29BAA555C6047A /* SEGHTTPClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B9E5ADCBDC4F69D8EA948FF51B0D0AB /* SEGHTTPClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 57F39C3A350D0C79515078277A4A30F2 /* NSData+Nocilla.m in Sources */ = {isa = PBXBuildFile; fileRef = 04102C8A636C2565CCD3FBB08DA3B957 /* NSData+Nocilla.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5879A13A87CC9D9BEDE5351704BDA541 /* SPTExcludeGlobalBeforeAfterEach.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A9FBDBCA6592F4689ED88CC150A26F /* SPTExcludeGlobalBeforeAfterEach.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5B2D4A621D3DA971A474776AF36BB073 /* EXPBlockDefinedMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D170E667AE51D1E486429CF9EB14F8E2 /* EXPBlockDefinedMatcher.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 5BE554338DE6FB62A2C1E198797C3C79 /* NSString+Nocilla.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BCC19A1ADDDD255485E6F7519161F9B /* NSString+Nocilla.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5EA7043FE10E75D02F3C3052AF8B8318 /* EXPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E09F4CDEE2C1AF48406C4B1D274F21A /* EXPDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 60E906CDC30F4C0523F21C90F9491A14 /* LSNocilla.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D88FCD425720D9CDAA8CF432423A50E /* LSNocilla.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 63402D899FE759DBD6505CFF19BFD7E3 /* SPTSharedExampleGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = F5268D4F677423311AF279E51E02717D /* SPTSharedExampleGroups.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 65BC31095CCDFC80CBF6BBA843751F23 /* EXPMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = FEEF1CCD4245A7A1DD5741CB920D2D0D /* EXPMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 65E2F7AD000FC4031DE3B3D9C4DD0461 /* NSURLRequest+LSHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = A751917E35042705FAA69CC21DBF68E9 /* NSURLRequest+LSHTTPRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 66A27898E989A3FA5C15AA671C4536F0 /* EXPMatchers+beIdenticalTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 54956A0063A54B236DD3CB15A478F607 /* EXPMatchers+beIdenticalTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 67459AD239EF669A365519E06B45DCFE /* EXPExpect.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CC2B2F237911FB7A48EA0A688CE9DFD /* EXPExpect.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 683D42CCDBA04DEAA5927130555865FB /* LSStringMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA21B0A0686B2730612CAA48E246F7C /* LSStringMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 68648F40FB98A5F4EF4AD187473D1F3D /* SPTSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = EB6E879A49A59A04DF43FA52A7B9ABC5 /* SPTSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6895E8584D9E5DD9FD807FA66594B619 /* SEGStoreKitTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FFBDA242621DB525DC5C434ECEB07D8 /* SEGStoreKitTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6AAD3EF28C1C2DA026B93AD8D814F64D /* Nocilla-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 76010B681AA03D877FD5A52AF8E82C9D /* Nocilla-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6E1D978790705E137FDE439AA68DD3AA /* EXPFloatTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A77024A1E8F3C2079DEEB9C333F7C62 /* EXPFloatTuple.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6EF70D5FEA5E240C75CF1A94F09A22BD /* SEGSegmentIntegrationFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = E966D79DA0495B118117BE69BA364056 /* SEGSegmentIntegrationFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6EFC63A5CED45BB39FC79D87F2C47D6B /* EXPMatchers+beGreaterThan.h in Headers */ = {isa = PBXBuildFile; fileRef = 52269A5CEFF209E97F66A41DB2300E1C /* EXPMatchers+beGreaterThan.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6F278423C8AE1DA47F35E374BB5B91EC /* EXPMatchers+beSupersetOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 35D5D72603A85EDED9BC68C849A71677 /* EXPMatchers+beSupersetOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 6F4BD4857B80D7977A32B05ABFDFC79E /* SEGBluetooth.h in Headers */ = {isa = PBXBuildFile; fileRef = EF85FBA44D56783D225C6A37BF642E1D /* SEGBluetooth.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6F9AC619478339681794CFB2FFF49EA3 /* LSStubRequestDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = BEF8786C83B5717F9219906718C628A9 /* LSStubRequestDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 70F84A543FB8DC8063A9630331204B44 /* SEGScreenPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 302868B704DAA2DFE9B11259778B473E /* SEGScreenPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 72D1D73620A94FA53E1B32472F3E00C2 /* SPTExample.h in Headers */ = {isa = PBXBuildFile; fileRef = FCB28A78CDBB39AB53186AED8F73F51A /* SPTExample.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7378D773448D44130FB2CF4847619B8D /* LSStubRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = CDE10F02F8C6D0A45FF51B31983F2168 /* LSStubRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 746762DD022722AA0783532E872ACCC0 /* LSHTTPBody.h in Headers */ = {isa = PBXBuildFile; fileRef = 166736907F1E5180FC092545C416D144 /* LSHTTPBody.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 74D38E3369D473A7ADA9B2D3F2320B63 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */; }; + 750E8E7A6E8885E3CAE1F8F7B9B57ADC /* SEGLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 667F12E8A368666B10A4BD060F0E1FC5 /* SEGLocation.m */; }; + 76CCABE79C04444450153424D7CE1DC1 /* EXPMatchers+beSupersetOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA4D4B8C6E5AF50AB609E295A01DAE5 /* EXPMatchers+beSupersetOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 76D337327C10A7555447B69AA1562647 /* EXPMatchers+beInstanceOf.m in Sources */ = {isa = PBXBuildFile; fileRef = C22F0A3F7D136F37CBC921C82913151E /* EXPMatchers+beInstanceOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 781A3371065498563238D5E4E7F7BC49 /* LSStubResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = FB8EAF8AD870197091A669E2F17D31C7 /* LSStubResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79558B1F97ABE4AB8942DC18BEBD4B82 /* EXPMatchers+beKindOf.h in Headers */ = {isa = PBXBuildFile; fileRef = BCC2B009D60DA44006AF374F9AA779D5 /* EXPMatchers+beKindOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79ED2E8199BF13D92950ED89A654B13A /* NSData+GZIP.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B3FB8815830BA6655399E9878E181BA /* NSData+GZIP.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7AFCEE99C2A708CAA64C621B4E280087 /* SPTSharedExampleGroups.m in Sources */ = {isa = PBXBuildFile; fileRef = 24565F37B7304C172A8154C3A695BDCB /* SPTSharedExampleGroups.m */; }; + 7B223B4E6EF14BA12DA113F7EE10B96C /* NSObject+Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = A4DE49C43591ED9234166839F5158A27 /* NSObject+Expecta.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7CC8165077CEBED403D0B9996DDCE1E3 /* SEGReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = DED7AF9FB2283EBEA906F2E9D6884D10 /* SEGReachability.m */; }; + 805E425BBEF7A6133E32E1D30A073010 /* EXPExpect.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E9DB94FDFB0EDD4A7B005776522AD8F /* EXPExpect.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 80C451D6026B1C2BF6EF917B4F5BF98B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */; }; + 835E821118B7E113219A4FA9637A2876 /* SEGAliasPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C21E4C22CC02DA20E2540F7FACAA4E1 /* SEGAliasPayload.m */; }; + 837B593D7C1D01B4EA400247309D6AB0 /* Expecta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 36CEB42FC801D6DD1C0C86F8D5A6B031 /* Expecta-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 85E31076D5530AEEB45ACF16B2B8A983 /* EXPMatchers.h in Headers */ = {isa = PBXBuildFile; fileRef = A92A84FCFC4ABCF6BE29001116807297 /* EXPMatchers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 85EB2F216487CB2E8F3FCCFBC4D69912 /* EXPMatchers+beTruthy.h in Headers */ = {isa = PBXBuildFile; fileRef = 32EC638BEB57AED9169DE0100EF22F2D /* EXPMatchers+beTruthy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 861BC8874F6CC678B0C994082425BB2C /* LSASIHTTPRequestAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = F13E1AE89B0F592308CBD954E0C4FA45 /* LSASIHTTPRequestAdapter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 87FD5F0F682CDEB6A348CA448889E3EA /* EXPMatchers+beKindOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 621F843A137B3E3899CF96CF46CF5A5A /* EXPMatchers+beKindOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 8927C37DD5750B9F6409C3EA80623A16 /* NSURLRequest+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = B69A66C3DB5045ACF35AE9E9F44D01B6 /* NSURLRequest+DSL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8929941F0C7A48971332804FD69CC3CA /* LSASIHTTPRequestHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 7245ADF080442E19CC8B85AD6F96A6B6 /* LSASIHTTPRequestHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 8A38391C03BADD1855970B67897C4BCD /* UIViewController+SEGScreen.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E33D9C28142DB3C7545C518B07D7F00 /* UIViewController+SEGScreen.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B7BE1676BE19245D2C809BE00F239BA /* Analytics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BE093074278010988054D4827E030ABB /* Analytics-dummy.m */; }; + 8C8C1B0D83FE6A4352F15154DB16372C /* EXPMatcherHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 81BC3CC72028638F87B514D1A7853EEB /* EXPMatcherHelpers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8F8D4BABD6C928CFEE32CDA5CC97188A /* Specta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A2B067495F18D88E6AAE62ED9A3A952 /* Specta-dummy.m */; }; + 918E06480F28F27361B19D19432F8538 /* EXPMatchers+endWith.m in Sources */ = {isa = PBXBuildFile; fileRef = 81D50D817643B34BE0A6793B8A38C131 /* EXPMatchers+endWith.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 931D410B9F8ACB935883DF8C59F9C93E /* EXPMatchers+postNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = AE5E4907A3648032A5E52DCB25AF70A2 /* EXPMatchers+postNotification.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 937BB86FD6EABBB863B68A0C98160CEE /* SEGSegmentIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F504EDCF181E37EA1125AA0272409FE /* SEGSegmentIntegration.m */; }; + 94C47C87E397972CE98F75929F3B706C /* ExpectaObject.m in Sources */ = {isa = PBXBuildFile; fileRef = A4480B33930A9075D36FFA16677F5113 /* ExpectaObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 94EB8FF688C1E8F952B8C167F3F2B0B4 /* SPTCompiledExample.h in Headers */ = {isa = PBXBuildFile; fileRef = CB93789D9F5E4D02164A25D17E4624CB /* SPTCompiledExample.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 95F0E3816CCB73CCF8BFAC82C1EDE91B /* SpectaUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = D91118622DEF2A715C0CD5CBA450F494 /* SpectaUtility.m */; }; + 98448E68F706C3077F402B1F1B64520E /* NSData+Matcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = DF9CDAC774AF1EC88F9AC25D9F7E84AD /* NSData+Matcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B2E761A064459F77EA9870BEF03ACC3 /* EXPMatchers+postNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8EFD397EC324185FA95501C7A096F7 /* EXPMatchers+postNotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9BB9159FBA757600D3D4C0FF645F3911 /* EXPMatchers+beInTheRangeOf.m in Sources */ = {isa = PBXBuildFile; fileRef = ADD0C2A882D7119AB07E313F15E6308B /* EXPMatchers+beInTheRangeOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 9E7987C4C41E5C7A8D930B2847A3EF20 /* SEGAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = B0D090B0373B3F51B59F99A087DD9876 /* SEGAnalytics.m */; }; + A10DD31CE801172ADE6CADAFC3BEF9CE /* SPTExampleGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = ED7B697D020FD4EE3EBBE0801C80017A /* SPTExampleGroup.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A434C8CB0F23A35DA222105C7B11300D /* LSHTTPRequestDiff.h in Headers */ = {isa = PBXBuildFile; fileRef = F6FCFB90F9A4F2EC5FC71A3E0A0D4D48 /* LSHTTPRequestDiff.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A460983620B3719092C5217CCC57A699 /* LSHTTPRequestDSLRepresentation.h in Headers */ = {isa = PBXBuildFile; fileRef = 15457E7901D93551F110977610781944 /* LSHTTPRequestDSLRepresentation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A5C90576850BC920FB28CA13242AED17 /* NSData+Matcheable.m in Sources */ = {isa = PBXBuildFile; fileRef = BA4F20DC01C560722BCBB19127C7A148 /* NSData+Matcheable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A7321D75FDD5D9685F18845E84A206F4 /* SPTSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = ACA9E38A9ABB8CFEF3056F4E22836A79 /* SPTSpec.m */; }; + A968114B5888EE6CF93F30331B51FF89 /* SPTCompiledExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 72ADC84696EDBD1596C7756BC3CAAB31 /* SPTCompiledExample.m */; }; + ABF3ECA6CC0D0DB55A283D11FE3F1771 /* SEGBluetooth.m in Sources */ = {isa = PBXBuildFile; fileRef = C04ECE5A1F456FEE55631C245E8069F6 /* SEGBluetooth.m */; }; + AF1F46668D4591602887998C6E9C10AD /* EXPMatchers+beCloseTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 19326B1AD9863BA4843E7602B723451C /* EXPMatchers+beCloseTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AFFC8900E52BBEC72059334132F3A8F3 /* ExpectaSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = EAA0B0D8410A748100182967B6BD8E5D /* ExpectaSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AFFF59A6580376AFB69A1B0877FEAE98 /* SpectaUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 35910C380D55DE8C13B47AB42B48125D /* SpectaUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B057CD393503769DBB7FCD6AE4173B66 /* SEGAnalyticsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8812DF544FCD5304DFEEDFDB93877EA2 /* SEGAnalyticsUtils.m */; }; + B0BD13A01F667B129F4F5F167088A024 /* Nocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = E0923798C6DA8B5F02D377F72EBE9220 /* Nocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B30D380B5EFCD54FEE04D3C4F1988262 /* NSString+Nocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = EAEEC0CE4F05D24E0928BD1776E06892 /* NSString+Nocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B479AE437D9B71C51CB95895BCCA7373 /* Specta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 400AC27B28C940AD4C7FED5171E00B73 /* Specta-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B4B9E8A3759D576D35EFEE37A776B6DA /* SEGGroupPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = A21DCEA714702B96A8020B32249F7F05 /* SEGGroupPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B7185ADC751C1C1B68DCE07933CF0CB5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */; }; + B7B6C386D18C61D236CE7B92C62DC4F4 /* LSHTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = DADA5DCACFCC26BAF81CBA77D5DAA680 /* LSHTTPResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B7BAA1610C192270DE28D6F9ACE95542 /* LSStubResponseDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = FE0F7A461D70E6027BC573A58C77C205 /* LSStubResponseDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B84431CF8C64F363A334AA7089F6C134 /* NSValue+Expecta.m in Sources */ = {isa = PBXBuildFile; fileRef = DC8C0425C03478A644814F28209B4B59 /* NSValue+Expecta.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + BA12B131F10BCE3BE6E9A02FC908FE9D /* EXPMatchers+beCloseTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 10FB2870274E6A883E945515401DCA07 /* EXPMatchers+beCloseTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + BA2D2E8C8CCC6DB1CBE95D6C171C3100 /* SEGSegmentIntegrationFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D65CF2F4ADA2B0AF79D7D23F00EC344 /* SEGSegmentIntegrationFactory.m */; }; + BC5155194259A004C9DD605674B023A9 /* SpectaTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 271512C3D7207E4C56D018B95B7531C0 /* SpectaTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC55C8365AEFF8217F6A567607754854 /* EXPDoubleTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = 180E448B9AF17FE7D45A0668988629FB /* EXPDoubleTuple.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + BDE2564FBEF154A959111B0B91A34ED4 /* SpectaDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = EECB3EED6027FDABD7D3EAF6A92E046F /* SpectaDSL.m */; }; + BEFFE9FFE52E9A0833A7D2D8FB67EB4D /* EXPMatchers+beSubclassOf.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E1163F011E3D444A62D529DD550108 /* EXPMatchers+beSubclassOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + BF3CB6A6F9B86A8723208C7A2418BB10 /* Pods-Analytics_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFDE47A271C4D8EB4957B57FD71DD6E /* Pods-Analytics_Tests-dummy.m */; }; + C2E3AD915C090FFF5AE1DD3586F3BD31 /* SEGSegmentIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C3C10DA689CED703B1405801BFD4ED6 /* SEGSegmentIntegration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C4F4C8EF4A764C0FDEB5789F9207FFF2 /* LSNSURLHook.h in Headers */ = {isa = PBXBuildFile; fileRef = BFA2BD58C9EFC80EA6F447245DDE8374 /* LSNSURLHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C5F3EBC41706031D0941D1D0195A8D39 /* SEGIntegrationFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = DE36CBC163E9F3578D7D2552F1BF89DD /* SEGIntegrationFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C6B1AECA74F601617F8329EB45FB0265 /* NSString+Matcheable.m in Sources */ = {isa = PBXBuildFile; fileRef = E36B02538433DEEBA0722170A625F321 /* NSString+Matcheable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C79A1CD129A1579A7749F570CB4D3962 /* LSHTTPRequestDSLRepresentation.m in Sources */ = {isa = PBXBuildFile; fileRef = EA4C6FC11C1430748A8424DE661C017A /* LSHTTPRequestDSLRepresentation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + CA303CF6D30D41F05C81DF35576B6C34 /* LSMatcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = 5526DDE7CBC2FA01EE8D2FDDCB4D8815 /* LSMatcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA40E122B8FECDC1F1A2C37AF14EBA8A /* Analytics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F8115C1476FCC21E22C39FDAC8BB6EB8 /* Analytics-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CDBB6AA64E2CFC2B0B0FB102EBED8127 /* NSData+GZIP.m in Sources */ = {isa = PBXBuildFile; fileRef = A97117AD8B3E8115570D2934BF04F744 /* NSData+GZIP.m */; }; + CE3F4ECBB0BC095577D66AE50C8E604C /* EXPFloatTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DB4CCAC4A118DC45CB2F562BDE1E5AC /* EXPFloatTuple.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + D2B3B8A5532F9F084D2855970798CB82 /* LSHTTPClientHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 04CC74C4C61327B9C4DF18957B7812E3 /* LSHTTPClientHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D4E2C5E311068E1AA79643974090A086 /* LSStubResponseDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DFA130006D64C9119222D3CC6DEEB97F /* LSStubResponseDSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D83677C54D2226C67886A525B0B46FBE /* EXPMatchers+beLessThanOrEqualTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 63AB1B8A34F9D4B45393CE44CE285382 /* EXPMatchers+beLessThanOrEqualTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + D89A3918634DBBD74E3642EDEFF76A71 /* LSStringMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 68EA8E41E380502BF92641F1CCBA68CA /* LSStringMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D8D1615374BCBF30AC4B2572E4EA0DE0 /* SPTGlobalBeforeAfterEach.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AB3944B9D9D2C15A730CE655C94C4F1 /* SPTGlobalBeforeAfterEach.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D9600C057A14F3C9F461FB93E0019955 /* SEGPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EA5EAF696160B8FCE4415DCB87AC746 /* SEGPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D9B3D869B64684870A15D16EC496F3A3 /* SEGScreenPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 354E53CA2386704D8DB4A48EF2CF11E5 /* SEGScreenPayload.m */; }; + DAACBD590DEC0537819A015982A9F0FF /* SEGIdentifyPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = D41DBD56C412C840D2090A4BF5CC6023 /* SEGIdentifyPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB30F82FB1BE083D9471B965FB500CA2 /* EXPMatchers+conformTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C86E1F5E7B8BE2BA68A3B6416E532D1 /* EXPMatchers+conformTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + DB5E7396AB1F4CA51F6B02A52E3BCA8A /* LSMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D2CFFA1D7BA56478F70ED09046A27493 /* LSMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DDA4DCAE58682D1F923541927EDD2275 /* LSStubResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 372CBB8F4D124EFE07566B3EFBA4352E /* LSStubResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DE94765732B7FBCD78E56173F4A782ED /* LSStubRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = BD66B7A4E6D29687CDA5EDA6122D4FBC /* LSStubRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; DFAD8A72F42832092FEA3A299C8F2E17 /* Pods-Analytics_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 37125462CC547C0938F0719539C56D75 /* Pods-Analytics_Example-dummy.m */; }; - E0A077DFB064B79685B810CCEFB2F1EF /* EXPMatchers+respondTo.m in Sources */ = {isa = PBXBuildFile; fileRef = B174ECCB055189C835E1613FD300BB85 /* EXPMatchers+respondTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - E0AAF49134A0505DF00E20E7B62087E1 /* EXPMatchers+beIdenticalTo.h in Headers */ = {isa = PBXBuildFile; fileRef = AD9A1402E8720FD00C46040083DC9692 /* EXPMatchers+beIdenticalTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E1EC4532663CA75DE5BD00CB0A56814D /* Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F9EE98E21A0C637A4E0FE3B6F402DAD /* Expecta.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E669B5F2FE53951046FED0C26248D071 /* SEGPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EA5EAF696160B8FCE4415DCB87AC746 /* SEGPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E735386085CE344F6A01178CF4763852 /* EXPMatchers+beNil.h in Headers */ = {isa = PBXBuildFile; fileRef = 87A19FC30FAE97EDA655018A6AD2D54F /* EXPMatchers+beNil.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E93ACA020A2DE080521CBFD788093CAA /* SEGLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2876CC923D39E95B69C6461DB0732B2F /* SEGLocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ED5BD0E3736D52FE7CF6915B724E743E /* XCTest+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B320B192BAA2B7B006880B016A39AB10 /* XCTest+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EE27B2FD7FC797D56E25B1006AD82C3D /* SpectaUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 7687931B86D55C2A3B7570964EEFDEAB /* SpectaUtility.m */; }; - EF6497EE123F6BC0C1B09717437C5908 /* EXPUnsupportedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E64EE1FA2E988E166397F7C5FFFBEBB6 /* EXPUnsupportedObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - F0DDF02A078B917997FF025BB33BB842 /* EXPMatchers+conformTo.h in Headers */ = {isa = PBXBuildFile; fileRef = C7B5A923D27207113E5B55FE0DACDAD9 /* EXPMatchers+conformTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F12D57414A73406831CC032A7170DBFF /* EXPMatchers+beginWith.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D431759C2312628BAF106B8D2CC8DB2 /* EXPMatchers+beginWith.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - F13ACBC3636BB0F63C764503DD088AA2 /* SPTCompiledExample.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCE1E6823C0AC6058E1F677318C1D0F /* SPTCompiledExample.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F37910D0A6D3DC1B0E7F7618B055FCBF /* SEGSegmentIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = CD8AB60540951BA6FD1F1D9AAB9CACA5 /* SEGSegmentIntegration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F41209A94070904A00BDF24ACB6336B6 /* EXPMatchers+beFalsy.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E711193023B1623B4622AA72E1B5DB2 /* EXPMatchers+beFalsy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F4B3731EE4FD423B164E8F90E8E8B7D3 /* SEGSegmentIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 798A6CA697ED8D4C6147DC67F0904186 /* SEGSegmentIntegration.m */; }; - F4E3EA3FFF750623C0D3D4D3559FC09C /* SEGGroupPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = A21DCEA714702B96A8020B32249F7F05 /* SEGGroupPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F55241E33F19FCA9DE7690D34FD9982B /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B89BF7315BAB3516AF2A51041DC39C3B /* XCTest.framework */; }; - F6BBC41C120C0A9EA21B11E42DDF0B83 /* Specta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1EC781C67B94698BC0FD79F6926656 /* Specta-dummy.m */; }; - F75CB2A727F678C9A848A3A11EA7979B /* EXPMatchers+haveCountOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E20292CF7B63EA8E98399EF2352F73D /* EXPMatchers+haveCountOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA24925D3BF8FC9D7FFBB90E859B8683 /* NSData+GZIP.h in Headers */ = {isa = PBXBuildFile; fileRef = 01A7A9FEEDB7BABBBDF8C9FE1239501F /* NSData+GZIP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FC20596ABFE14A61F171A29FD03275E7 /* EXPMatchers+contain.m in Sources */ = {isa = PBXBuildFile; fileRef = 31695F545CD3669506497ADBB22873F6 /* EXPMatchers+contain.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - FC45858927D3B6A0F922C4B697B04A38 /* EXPMatchers+match.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BC48829A0EB26D4DD51CD2AA4B0FE74 /* EXPMatchers+match.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - FD2D4497BC41412128C2D87C1BDE7398 /* EXPMatchers+beginWith.h in Headers */ = {isa = PBXBuildFile; fileRef = 79476B660CA0150E072A597FD1928591 /* EXPMatchers+beginWith.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FE8E34356D24F6759A8B010ED2F5707B /* EXPMatchers+raiseWithReason.m in Sources */ = {isa = PBXBuildFile; fileRef = CDC92BECE41FDD487136814173CB1558 /* EXPMatchers+raiseWithReason.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + E07A45CD453CFC98DE69AA370E5780F9 /* NSRegularExpression+Matcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = EEF47FCE12FE6BAF3EC7CB54E86434D7 /* NSRegularExpression+Matcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E0A077DFB064B79685B810CCEFB2F1EF /* EXPMatchers+respondTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 43A15CD157816286E186F1211BE7202F /* EXPMatchers+respondTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + E0AAF49134A0505DF00E20E7B62087E1 /* EXPMatchers+beIdenticalTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 65032861CC8655A9899472EF027123E7 /* EXPMatchers+beIdenticalTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E1EC4532663CA75DE5BD00CB0A56814D /* Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D31811A6DA375FFEB0CC414383588EA /* Expecta.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4E1E323F67925451C594641D27EAAAB /* UIViewController+SEGScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 62325BDEE6F739C800DD201DE7266003 /* UIViewController+SEGScreen.m */; }; + E735386085CE344F6A01178CF4763852 /* EXPMatchers+beNil.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FC38653C71A4252F1FD159BB4D1EE4F /* EXPMatchers+beNil.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E87B2BDF61A795AF764D9ACDECB8CDD0 /* SEGStoreKitTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = D426F3C587A1858E81CF1CF37308E72B /* SEGStoreKitTracker.m */; }; + EF6497EE123F6BC0C1B09717437C5908 /* EXPUnsupportedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 00407E6E2F0E736DD106AAD3EDD009C6 /* EXPUnsupportedObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + F0BAD7AF329A8213BAC2E1847FCEA088 /* SEGGroupPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D7B595DA38C7DFC60F78642C2073770 /* SEGGroupPayload.m */; }; + F0DDF02A078B917997FF025BB33BB842 /* EXPMatchers+conformTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D1397952079E341B332801205983771 /* EXPMatchers+conformTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F12D57414A73406831CC032A7170DBFF /* EXPMatchers+beginWith.m in Sources */ = {isa = PBXBuildFile; fileRef = E5FFF41A9A24C033FCC946202869A5C9 /* EXPMatchers+beginWith.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + F1B92A4CC0ACE18D6B0B0A2153C13D08 /* ASIHTTPRequestStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F6BBFF3ED908BBB61D8B043C744FDF2 /* ASIHTTPRequestStub.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F3B1762AAD01333FFBF43A716D325A59 /* SPTCallSite.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ABB6B532CF369102165144C3A21CF99 /* SPTCallSite.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3BB4311FA83CDDD5031A97F03A9E68A /* SPTCallSite.m in Sources */ = {isa = PBXBuildFile; fileRef = ADAD3ED20015D5D2190C898DE5046699 /* SPTCallSite.m */; }; + F4043CFB6D8E069D3879DA09F202715F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */; }; + F41209A94070904A00BDF24ACB6336B6 /* EXPMatchers+beFalsy.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CA63BF80025A3D25CD928A36136F551 /* EXPMatchers+beFalsy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F75CB2A727F678C9A848A3A11EA7979B /* EXPMatchers+haveCountOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 00F102F1E58C3474E3A809EE1E5B5655 /* EXPMatchers+haveCountOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FC20596ABFE14A61F171A29FD03275E7 /* EXPMatchers+contain.m in Sources */ = {isa = PBXBuildFile; fileRef = 426DA9ED9B302E36BAC4BC16F6366C22 /* EXPMatchers+contain.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + FC45858927D3B6A0F922C4B697B04A38 /* EXPMatchers+match.m in Sources */ = {isa = PBXBuildFile; fileRef = F8843B0B76B48BC52F8BE7AD151C48C7 /* EXPMatchers+match.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + FCB4158D0A7BB2032A5D13F0D3758642 /* LSHTTPClientHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C8DB76D2A3AF8110BA31D031027E4D5 /* LSHTTPClientHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + FCFC2208684969E5BDF9F439AEE58162 /* NSString+Matcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FE58475FA0CB0C2C3DDBABEA84C6676 /* NSString+Matcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FD2D4497BC41412128C2D87C1BDE7398 /* EXPMatchers+beginWith.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DC968F5E8CEE0A8BDD77E1EB542F982 /* EXPMatchers+beginWith.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FE8E34356D24F6759A8B010ED2F5707B /* EXPMatchers+raiseWithReason.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C4F938E8FE97C252FA207D0DD372B65 /* EXPMatchers+raiseWithReason.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 5B0BB086024D62CF5629FE2FAFA19576 /* PBXContainerItemProxy */ = { + 1BB30AB7E00A4E29A1A57BB824C19B5D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 481403DCFE420996D2A734931FA92D7F; - remoteInfo = Analytics; + remoteGlobalIDString = 393E0E1A41299C44C63DBB766A243010; + remoteInfo = Nocilla; }; - 90C2D9A56026173503C37A4DDCDF6E4C /* PBXContainerItemProxy */ = { + 4AD3159493E139AFFA995C125A1880D9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 0FD30761B1CF7847B4A3F5F0BC3060A7; - remoteInfo = Specta; + remoteGlobalIDString = 0D888F29E05E498D0CD91A51D28599A5; + remoteInfo = Expecta; }; - C144EEE342D71EA1D4775D7CAB4654C0 /* PBXContainerItemProxy */ = { + 5B0BB086024D62CF5629FE2FAFA19576 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 0D888F29E05E498D0CD91A51D28599A5; - remoteInfo = Expecta; + remoteGlobalIDString = 481403DCFE420996D2A734931FA92D7F; + remoteInfo = Analytics; + }; + E0F3DF15C53DA09D53FBAFBAF65C493E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9D2DFA866E52BD6EF797813C646A8B61; + remoteInfo = Specta; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 01A7A9FEEDB7BABBBDF8C9FE1239501F /* NSData+GZIP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSData+GZIP.h"; sourceTree = ""; }; - 04BBCCE13322F42620459D20E8DE3673 /* SPTCallSite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTCallSite.h; path = Specta/Specta/SPTCallSite.h; sourceTree = ""; }; - 04D6221AD6AD261B601F9711E749A5D5 /* EXPBlockDefinedMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPBlockDefinedMatcher.h; path = Expecta/EXPBlockDefinedMatcher.h; sourceTree = ""; }; - 06C1DD363D5966F42C4D802641B4CEEA /* SPTSharedExampleGroups.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTSharedExampleGroups.h; path = Specta/Specta/SPTSharedExampleGroups.h; sourceTree = ""; }; - 084806D4CE744B86C95FBEF56EC7529E /* SEGStoreKitTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGStoreKitTracker.m; sourceTree = ""; }; - 0D742C36417083F91C50620C170817D1 /* EXPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPDefines.h; path = Expecta/EXPDefines.h; sourceTree = ""; }; + 00407E6E2F0E736DD106AAD3EDD009C6 /* EXPUnsupportedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPUnsupportedObject.m; path = Expecta/EXPUnsupportedObject.m; sourceTree = ""; }; + 00F102F1E58C3474E3A809EE1E5B5655 /* EXPMatchers+haveCountOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+haveCountOf.h"; path = "Expecta/Matchers/EXPMatchers+haveCountOf.h"; sourceTree = ""; }; + 035E9D6E0275BCAFD58AF47623DB22DF /* EXPMatchers+beTruthy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beTruthy.m"; path = "Expecta/Matchers/EXPMatchers+beTruthy.m"; sourceTree = ""; }; + 0381D6093D21AFDDE30CFE22F3BB680D /* LSMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSMatcher.h; path = Nocilla/Matchers/LSMatcher.h; sourceTree = ""; }; + 04102C8A636C2565CCD3FBB08DA3B957 /* NSData+Nocilla.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+Nocilla.m"; path = "Nocilla/Categories/NSData+Nocilla.m"; sourceTree = ""; }; + 048D94BE82C84555D409A93BF039EEE5 /* LSDataMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSDataMatcher.h; path = Nocilla/Matchers/LSDataMatcher.h; sourceTree = ""; }; + 04CC74C4C61327B9C4DF18957B7812E3 /* LSHTTPClientHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPClientHook.h; path = Nocilla/Hooks/LSHTTPClientHook.h; sourceTree = ""; }; + 07A9FBDBCA6592F4689ED88CC150A26F /* SPTExcludeGlobalBeforeAfterEach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExcludeGlobalBeforeAfterEach.h; path = Specta/Specta/SPTExcludeGlobalBeforeAfterEach.h; sourceTree = ""; }; + 07F6FEB6A8B5B3C02B1F7AC0B1416F42 /* EXPBlockDefinedMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPBlockDefinedMatcher.h; path = Expecta/EXPBlockDefinedMatcher.h; sourceTree = ""; }; + 0A10D5AEA0D81AFFED07D5B506817936 /* Specta.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Specta.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0B69B1E64147D5B5D22E6B8CAF1955AA /* XCTestCase+Specta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "XCTestCase+Specta.m"; path = "Specta/Specta/XCTestCase+Specta.m"; sourceTree = ""; }; 0D7B595DA38C7DFC60F78642C2073770 /* SEGGroupPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGGroupPayload.m; sourceTree = ""; }; - 0E63DBA4A7397B4C015789AB4075AA7D /* SEGAnalyticsRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGAnalyticsRequest.m; sourceTree = ""; }; - 113855CF66A69F6876546E978AC2362E /* SPTTestSuite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTTestSuite.m; path = Specta/Specta/SPTTestSuite.m; sourceTree = ""; }; - 124408F448490BCF39CC1C2AA5297197 /* EXPMatchers+postNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+postNotification.h"; path = "Expecta/Matchers/EXPMatchers+postNotification.h"; sourceTree = ""; }; + 0E0684A9A2D760E042578EB213B228AB /* EXPMatchers+raise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+raise.m"; path = "Expecta/Matchers/EXPMatchers+raise.m"; sourceTree = ""; }; + 10FB2870274E6A883E945515401DCA07 /* EXPMatchers+beCloseTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beCloseTo.m"; path = "Expecta/Matchers/EXPMatchers+beCloseTo.m"; sourceTree = ""; }; + 119280D2BDDC2135EAF4BB7B955E8FAB /* EXPMatchers+beLessThanOrEqualTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beLessThanOrEqualTo.h"; path = "Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.h"; sourceTree = ""; }; + 129E0D30DA701F5E349DEA97F20661CA /* EXPMatchers+raise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+raise.h"; path = "Expecta/Matchers/EXPMatchers+raise.h"; sourceTree = ""; }; 146F19B2C2324623B392F801D1711A1B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 177EE8E7DD8C4226F8E15FE4C447154D /* EXPMatchers+endWith.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+endWith.h"; path = "Expecta/Matchers/EXPMatchers+endWith.h"; sourceTree = ""; }; - 17B271C769948413B2D6A2FA5FA661F5 /* EXPFloatTuple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPFloatTuple.h; path = Expecta/EXPFloatTuple.h; sourceTree = ""; }; - 186D37D789BDC5806713AC08D0BD0452 /* EXPMatchers+beKindOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beKindOf.h"; path = "Expecta/Matchers/EXPMatchers+beKindOf.h"; sourceTree = ""; }; - 1B06F4EDF054A24295A7BD524587CABC /* EXPMatchers+beSupersetOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beSupersetOf.m"; path = "Expecta/Matchers/EXPMatchers+beSupersetOf.m"; sourceTree = ""; }; - 1DF8BC2C6730675F74DD28A442535501 /* SPTCompiledExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTCompiledExample.m; path = Specta/Specta/SPTCompiledExample.m; sourceTree = ""; }; + 15457E7901D93551F110977610781944 /* LSHTTPRequestDSLRepresentation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPRequestDSLRepresentation.h; path = Nocilla/DSL/LSHTTPRequestDSLRepresentation.h; sourceTree = ""; }; + 15C91B211733F2117793BF2F2343BB56 /* Nocilla.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Nocilla.modulemap; sourceTree = ""; }; + 166736907F1E5180FC092545C416D144 /* LSHTTPBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPBody.h; path = Nocilla/Model/LSHTTPBody.h; sourceTree = ""; }; + 180E448B9AF17FE7D45A0668988629FB /* EXPDoubleTuple.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPDoubleTuple.m; path = Expecta/EXPDoubleTuple.m; sourceTree = ""; }; + 19326B1AD9863BA4843E7602B723451C /* EXPMatchers+beCloseTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beCloseTo.h"; path = "Expecta/Matchers/EXPMatchers+beCloseTo.h"; sourceTree = ""; }; + 1B1D2940D8C1436462D7D6D8912D3797 /* EXPMatchers+haveCountOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+haveCountOf.m"; path = "Expecta/Matchers/EXPMatchers+haveCountOf.m"; sourceTree = ""; }; + 1D7E90431DC0B8E1E7403353232CC41A /* Expecta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Expecta-dummy.m"; sourceTree = ""; }; + 1DB4CCAC4A118DC45CB2F562BDE1E5AC /* EXPFloatTuple.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPFloatTuple.m; path = Expecta/EXPFloatTuple.m; sourceTree = ""; }; + 1E09F4CDEE2C1AF48406C4B1D274F21A /* EXPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPDefines.h; path = Expecta/EXPDefines.h; sourceTree = ""; }; + 1E33D9C28142DB3C7545C518B07D7F00 /* UIViewController+SEGScreen.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIViewController+SEGScreen.h"; sourceTree = ""; }; 1E64EA832A59F14879437B3965DD8C35 /* SEGIdentifyPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGIdentifyPayload.m; sourceTree = ""; }; - 1F5CF0D3894D4FC1B84CF0F527D0D766 /* EXPMatchers+beSubclassOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beSubclassOf.h"; path = "Expecta/Matchers/EXPMatchers+beSubclassOf.h"; sourceTree = ""; }; - 1F9EE98E21A0C637A4E0FE3B6F402DAD /* Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Expecta.h; path = Expecta/Expecta.h; sourceTree = ""; }; - 231107913CCC73928F45805FECF6CF28 /* UIViewController+SEGScreen.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+SEGScreen.m"; sourceTree = ""; }; + 1F504EDCF181E37EA1125AA0272409FE /* SEGSegmentIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGSegmentIntegration.m; sourceTree = ""; }; + 1F6BBFF3ED908BBB61D8B043C744FDF2 /* ASIHTTPRequestStub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ASIHTTPRequestStub.m; path = Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.m; sourceTree = ""; }; + 1FFBDA242621DB525DC5C434ECEB07D8 /* SEGStoreKitTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGStoreKitTracker.h; sourceTree = ""; }; + 2076CC034F6103DCF45A469B1E548E27 /* Nocilla-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nocilla-prefix.pch"; sourceTree = ""; }; + 215FA13C8BB3701687A65C35407C888C /* Expecta-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Expecta-prefix.pch"; sourceTree = ""; }; 238B44026340671D3B7B175CDAA8D5A7 /* Pods-Analytics_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Analytics_Tests-resources.sh"; sourceTree = ""; }; - 2499EDF4CE48DC7D295875D373CE6ACB /* NSValue+Expecta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSValue+Expecta.m"; path = "Expecta/NSValue+Expecta.m"; sourceTree = ""; }; - 27576C638FD3AB691E7F4FB1E3980464 /* EXPMatcherHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPMatcherHelpers.h; path = Expecta/Matchers/EXPMatcherHelpers.h; sourceTree = ""; }; - 279DF95762E948BE7B719A7F673E9E56 /* EXPMatchers+beIdenticalTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beIdenticalTo.m"; path = "Expecta/Matchers/EXPMatchers+beIdenticalTo.m"; sourceTree = ""; }; - 2876CC923D39E95B69C6461DB0732B2F /* SEGLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGLocation.h; sourceTree = ""; }; + 24565F37B7304C172A8154C3A695BDCB /* SPTSharedExampleGroups.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTSharedExampleGroups.m; path = Specta/Specta/SPTSharedExampleGroups.m; sourceTree = ""; }; + 25F5A3115A623DA04AA16CFEC74F2EF9 /* LSNSURLSessionHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSNSURLSessionHook.h; path = Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.h; sourceTree = ""; }; + 271512C3D7207E4C56D018B95B7531C0 /* SpectaTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaTypes.h; path = Specta/Specta/SpectaTypes.h; sourceTree = ""; }; + 287BFBC3E9767165D9BCD7FD0BAD33D1 /* Nocilla-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nocilla-dummy.m"; sourceTree = ""; }; 298FC6C7A98AAB540EB7F2EB51B6780B /* Pods-Analytics_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Analytics_Example.modulemap"; sourceTree = ""; }; - 2A1EC781C67B94698BC0FD79F6926656 /* Specta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Specta-dummy.m"; sourceTree = ""; }; - 2AFD77F6B582228E3C05EB3F700225A9 /* EXPMatchers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPMatchers.h; path = Expecta/Matchers/EXPMatchers.h; sourceTree = ""; }; - 2CF861D2ADFE89409C39B6E076059DCE /* EXPMatchers+beGreaterThanOrEqualTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beGreaterThanOrEqualTo.m"; path = "Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.m"; sourceTree = ""; }; + 2C3C10DA689CED703B1405801BFD4ED6 /* SEGSegmentIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGSegmentIntegration.h; sourceTree = ""; }; + 2C8DB76D2A3AF8110BA31D031027E4D5 /* LSHTTPClientHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPClientHook.m; path = Nocilla/Hooks/LSHTTPClientHook.m; sourceTree = ""; }; + 2D65CF2F4ADA2B0AF79D7D23F00EC344 /* SEGSegmentIntegrationFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGSegmentIntegrationFactory.m; sourceTree = ""; }; + 2D88FCD425720D9CDAA8CF432423A50E /* LSNocilla.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSNocilla.m; path = Nocilla/LSNocilla.m; sourceTree = ""; }; 2D9258631DD61DF84F3898A4A287FDBE /* Pods-Analytics_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Analytics_Tests-acknowledgements.markdown"; sourceTree = ""; }; 2F5B032D6C28D7D23779332687354C86 /* SEGIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGIntegration.h; sourceTree = ""; }; 302868B704DAA2DFE9B11259778B473E /* SEGScreenPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGScreenPayload.h; sourceTree = ""; }; - 31695F545CD3669506497ADBB22873F6 /* EXPMatchers+contain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+contain.m"; path = "Expecta/Matchers/EXPMatchers+contain.m"; sourceTree = ""; }; - 33C929F06DEC760FA0B134E8F8D1C9FA /* EXPMatchers+raise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+raise.h"; path = "Expecta/Matchers/EXPMatchers+raise.h"; sourceTree = ""; }; + 323E13462D209A8AC526A27D9D767E45 /* EXPMatchers+beInstanceOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beInstanceOf.h"; path = "Expecta/Matchers/EXPMatchers+beInstanceOf.h"; sourceTree = ""; }; + 3291A964D3603A2B35E61C43E1D54DA2 /* Pods_Analytics_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Analytics_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 32EC638BEB57AED9169DE0100EF22F2D /* EXPMatchers+beTruthy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beTruthy.h"; path = "Expecta/Matchers/EXPMatchers+beTruthy.h"; sourceTree = ""; }; + 348E28395AC3E9B59263F66C9B316799 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 354E53CA2386704D8DB4A48EF2CF11E5 /* SEGScreenPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGScreenPayload.m; sourceTree = ""; }; - 36BB29C27B61C055294A8316529A8EF8 /* EXPMatchers+match.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+match.h"; path = "Expecta/Matchers/EXPMatchers+match.h"; sourceTree = ""; }; + 35910C380D55DE8C13B47AB42B48125D /* SpectaUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaUtility.h; path = Specta/Specta/SpectaUtility.h; sourceTree = ""; }; + 35D5D72603A85EDED9BC68C849A71677 /* EXPMatchers+beSupersetOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beSupersetOf.m"; path = "Expecta/Matchers/EXPMatchers+beSupersetOf.m"; sourceTree = ""; }; + 367CD2B562A7D4E32D8B08A63DA602ED /* EXPMatchers+equal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+equal.h"; path = "Expecta/Matchers/EXPMatchers+equal.h"; sourceTree = ""; }; + 36CEB42FC801D6DD1C0C86F8D5A6B031 /* Expecta-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Expecta-umbrella.h"; sourceTree = ""; }; 37125462CC547C0938F0719539C56D75 /* Pods-Analytics_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Analytics_Example-dummy.m"; sourceTree = ""; }; - 393405584126BC701B16CB695FBEC1B0 /* EXPMatchers+postNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+postNotification.m"; path = "Expecta/Matchers/EXPMatchers+postNotification.m"; sourceTree = ""; }; + 372CBB8F4D124EFE07566B3EFBA4352E /* LSStubResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubResponse.m; path = Nocilla/Stubs/LSStubResponse.m; sourceTree = ""; }; 3937A2307ECFEFDF18B81943CB85FE11 /* Pods-Analytics_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Analytics_Tests-umbrella.h"; sourceTree = ""; }; - 3A9CB1F11CBD9FB136A49748F09C22C3 /* SEGAnalyticsUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGAnalyticsUtils.h; sourceTree = ""; }; - 3ACF80B5A24CE07B6C736EEF474E7E9C /* EXPMatchers+beSubclassOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beSubclassOf.m"; path = "Expecta/Matchers/EXPMatchers+beSubclassOf.m"; sourceTree = ""; }; - 3B236E34C19DC967CCE978293BCF8C5E /* SPTSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTSpec.m; path = Specta/Specta/SPTSpec.m; sourceTree = ""; }; - 3B6DF8F89EC26F944197244B9F2AAB15 /* EXPMatchers+beCloseTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beCloseTo.h"; path = "Expecta/Matchers/EXPMatchers+beCloseTo.h"; sourceTree = ""; }; + 3BCC19A1ADDDD255485E6F7519161F9B /* NSString+Nocilla.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Nocilla.m"; path = "Nocilla/Categories/NSString+Nocilla.m"; sourceTree = ""; }; 3C21E4C22CC02DA20E2540F7FACAA4E1 /* SEGAliasPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGAliasPayload.m; sourceTree = ""; }; 3D93A3D2A2BE16A492FFCC33EA9B0495 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 3F32E405A85135EDBCBF4765A6BB530B /* EXPExpect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPExpect.m; path = Expecta/EXPExpect.m; sourceTree = ""; }; - 408EA78FA928332DAE21B1527BCC7A2F /* EXPMatchers+beTruthy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beTruthy.m"; path = "Expecta/Matchers/EXPMatchers+beTruthy.m"; sourceTree = ""; }; - 422EBF56CE7EDD00503D90B0231D3FC1 /* Specta.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Specta.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 42EC02837F7465B7AED8E1A256D57C91 /* EXPMatchers+beLessThan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beLessThan.h"; path = "Expecta/Matchers/EXPMatchers+beLessThan.h"; sourceTree = ""; }; + 400AC27B28C940AD4C7FED5171E00B73 /* Specta-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Specta-umbrella.h"; sourceTree = ""; }; + 41657CB8575AD4F6ED3C41808EFBAAFF /* Specta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Specta.h; path = Specta/Specta/Specta.h; sourceTree = ""; }; + 420D34612C84353D8EE232B5BE7A6593 /* SPTExampleGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTExampleGroup.m; path = Specta/Specta/SPTExampleGroup.m; sourceTree = ""; }; + 426DA9ED9B302E36BAC4BC16F6366C22 /* EXPMatchers+contain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+contain.m"; path = "Expecta/Matchers/EXPMatchers+contain.m"; sourceTree = ""; }; + 43A15CD157816286E186F1211BE7202F /* EXPMatchers+respondTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+respondTo.m"; path = "Expecta/Matchers/EXPMatchers+respondTo.m"; sourceTree = ""; }; + 43B0911FDD9E7D706E882B01CBE753A2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 43D97130E4590D9EBE6FDAE4AFCA402B /* EXPMatchers+raiseWithReason.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+raiseWithReason.h"; path = "Expecta/Matchers/EXPMatchers+raiseWithReason.h"; sourceTree = ""; }; + 44FB4DDE2873BC99C9529F866BA25D18 /* SPTTestSuite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTTestSuite.m; path = Specta/Specta/SPTTestSuite.m; sourceTree = ""; }; 458215A616486E2F717253D32605600B /* Pods-Analytics_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Analytics_Tests-frameworks.sh"; sourceTree = ""; }; + 47FF6EF9E62A9175DF61CE4FC4F0CBCF /* LSDataMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSDataMatcher.m; path = Nocilla/Matchers/LSDataMatcher.m; sourceTree = ""; }; + 48E6F388DB4C94996CFDB96CF560CBF8 /* EXPMatchers+respondTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+respondTo.h"; path = "Expecta/Matchers/EXPMatchers+respondTo.h"; sourceTree = ""; }; + 4A77024A1E8F3C2079DEEB9C333F7C62 /* EXPFloatTuple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPFloatTuple.h; path = Expecta/EXPFloatTuple.h; sourceTree = ""; }; 4B18B8410C6425F24B866CBDB74CABBF /* SEGAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGAnalytics.h; sourceTree = ""; }; + 4B3FB8815830BA6655399E9878E181BA /* NSData+GZIP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSData+GZIP.h"; sourceTree = ""; }; + 4B8950BFD3FA25B2C9EB3A08FF93CE3E /* Pods_Analytics_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Analytics_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B9E5ADCBDC4F69D8EA948FF51B0D0AB /* SEGHTTPClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGHTTPClient.h; sourceTree = ""; }; + 4CC2B2F237911FB7A48EA0A688CE9DFD /* EXPExpect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPExpect.h; path = Expecta/EXPExpect.h; sourceTree = ""; }; 4CFDE47A271C4D8EB4957B57FD71DD6E /* Pods-Analytics_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Analytics_Tests-dummy.m"; sourceTree = ""; }; - 4F67D8E8E16F0E77A2D4E5F714CEBC41 /* EXPBlockDefinedMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPBlockDefinedMatcher.m; path = Expecta/EXPBlockDefinedMatcher.m; sourceTree = ""; }; - 50FE9A09D0B93D03944E207CDDE1B51F /* NSData+GZIP.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSData+GZIP.m"; sourceTree = ""; }; - 51F770E0A0B3B0D2789D92A52AD3ABAE /* EXPMatchers+conformTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+conformTo.m"; path = "Expecta/Matchers/EXPMatchers+conformTo.m"; sourceTree = ""; }; - 51F8C648CB722FE51238487FAECC1517 /* SpectaTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaTypes.h; path = Specta/Specta/SpectaTypes.h; sourceTree = ""; }; - 54371815367C40EDB52FBDB27B2DBA70 /* Expecta-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Expecta-prefix.pch"; sourceTree = ""; }; - 592E81109E597E27A3D9DBB86ABBE590 /* EXPMatchers+beGreaterThanOrEqualTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beGreaterThanOrEqualTo.h"; path = "Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.h"; sourceTree = ""; }; - 5B01F350337B25F09061F55C2252CBD6 /* EXPMatchers+endWith.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+endWith.m"; path = "Expecta/Matchers/EXPMatchers+endWith.m"; sourceTree = ""; }; + 4DC44F50C0C0B23F18EEA2E4452A285E /* LSNSURLSessionHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSNSURLSessionHook.m; path = Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.m; sourceTree = ""; }; + 4F6572099C332D69E0D8AEF41D4F9F83 /* LSASIHTTPRequestHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSASIHTTPRequestHook.h; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.h; sourceTree = ""; }; + 52269A5CEFF209E97F66A41DB2300E1C /* EXPMatchers+beGreaterThan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beGreaterThan.h"; path = "Expecta/Matchers/EXPMatchers+beGreaterThan.h"; sourceTree = ""; }; + 52DDA6BC21D08377214BCAF012289DF5 /* EXPMatchers+beGreaterThanOrEqualTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beGreaterThanOrEqualTo.m"; path = "Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.m"; sourceTree = ""; }; + 54956A0063A54B236DD3CB15A478F607 /* EXPMatchers+beIdenticalTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beIdenticalTo.m"; path = "Expecta/Matchers/EXPMatchers+beIdenticalTo.m"; sourceTree = ""; }; + 5526DDE7CBC2FA01EE8D2FDDCB4D8815 /* LSMatcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSMatcheable.h; path = Nocilla/Matchers/LSMatcheable.h; sourceTree = ""; }; + 56F3BF36F4B28877AED0C75CDB6C2CF9 /* NSURLRequest+DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLRequest+DSL.m"; path = "Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.m"; sourceTree = ""; }; + 56F8D051211772210563049DD3A251E8 /* EXPMatchers+match.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+match.h"; path = "Expecta/Matchers/EXPMatchers+match.h"; sourceTree = ""; }; + 5750F85C4001818E251789B8C0029267 /* LSHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPRequest.h; path = Nocilla/Model/LSHTTPRequest.h; sourceTree = ""; }; + 57F611336E125F4ECBD6F0DF8F8CB0C5 /* NSURLRequest+LSHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+LSHTTPRequest.h"; path = "Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.h"; sourceTree = ""; }; + 58EF9D321A4473CCBF2CF307F3A716A1 /* NSData+Nocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+Nocilla.h"; path = "Nocilla/Categories/NSData+Nocilla.h"; sourceTree = ""; }; 5B12869C98411D50EACF87FAC7CCADD0 /* Pods-Analytics_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Analytics_Example-umbrella.h"; sourceTree = ""; }; - 5BC48829A0EB26D4DD51CD2AA4B0FE74 /* EXPMatchers+match.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+match.m"; path = "Expecta/Matchers/EXPMatchers+match.m"; sourceTree = ""; }; - 5BE4506716AF52468B3550AD5824670F /* EXPMatchers+beCloseTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beCloseTo.m"; path = "Expecta/Matchers/EXPMatchers+beCloseTo.m"; sourceTree = ""; }; - 5D431759C2312628BAF106B8D2CC8DB2 /* EXPMatchers+beginWith.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beginWith.m"; path = "Expecta/Matchers/EXPMatchers+beginWith.m"; sourceTree = ""; }; - 5E20292CF7B63EA8E98399EF2352F73D /* EXPMatchers+haveCountOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+haveCountOf.h"; path = "Expecta/Matchers/EXPMatchers+haveCountOf.h"; sourceTree = ""; }; - 5E711193023B1623B4622AA72E1B5DB2 /* EXPMatchers+beFalsy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beFalsy.h"; path = "Expecta/Matchers/EXPMatchers+beFalsy.h"; sourceTree = ""; }; - 621D45D57ACA8E38D852A1E07D2AD679 /* SpectaDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SpectaDSL.m; path = Specta/Specta/SpectaDSL.m; sourceTree = ""; }; - 65DA28E34D6B2634B0D3632970B9AFD0 /* EXPMatchers+raiseWithReason.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+raiseWithReason.h"; path = "Expecta/Matchers/EXPMatchers+raiseWithReason.h"; sourceTree = ""; }; - 67324AA26715C0742B62E59D0AAB374C /* EXPMatchers+beTruthy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beTruthy.h"; path = "Expecta/Matchers/EXPMatchers+beTruthy.h"; sourceTree = ""; }; - 67473F09A0FADF52D476EA88F48CFA54 /* EXPExpect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPExpect.h; path = Expecta/EXPExpect.h; sourceTree = ""; }; - 68F820C46D336F1E6EB733BFC4374C51 /* SPTExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExample.h; path = Specta/Specta/SPTExample.h; sourceTree = ""; }; - 690736929497BF866D7685E3620A13AC /* SEGBluetooth.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGBluetooth.m; sourceTree = ""; }; + 5B75167FE543EDAB22C03FFA2C43EB27 /* EXPMatchers+contain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+contain.h"; path = "Expecta/Matchers/EXPMatchers+contain.h"; sourceTree = ""; }; + 5D1397952079E341B332801205983771 /* EXPMatchers+conformTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+conformTo.h"; path = "Expecta/Matchers/EXPMatchers+conformTo.h"; sourceTree = ""; }; + 5EA21B0A0686B2730612CAA48E246F7C /* LSStringMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStringMatcher.h; path = Nocilla/Matchers/LSStringMatcher.h; sourceTree = ""; }; + 5FE58475FA0CB0C2C3DDBABEA84C6676 /* NSString+Matcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Matcheable.h"; path = "Nocilla/Matchers/NSString+Matcheable.h"; sourceTree = ""; }; + 621F843A137B3E3899CF96CF46CF5A5A /* EXPMatchers+beKindOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beKindOf.m"; path = "Expecta/Matchers/EXPMatchers+beKindOf.m"; sourceTree = ""; }; + 62325BDEE6F739C800DD201DE7266003 /* UIViewController+SEGScreen.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+SEGScreen.m"; sourceTree = ""; }; + 63AB1B8A34F9D4B45393CE44CE285382 /* EXPMatchers+beLessThanOrEqualTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beLessThanOrEqualTo.m"; path = "Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.m"; sourceTree = ""; }; + 65032861CC8655A9899472EF027123E7 /* EXPMatchers+beIdenticalTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beIdenticalTo.h"; path = "Expecta/Matchers/EXPMatchers+beIdenticalTo.h"; sourceTree = ""; }; + 667F12E8A368666B10A4BD060F0E1FC5 /* SEGLocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGLocation.m; sourceTree = ""; }; + 68EA8E41E380502BF92641F1CCBA68CA /* LSStringMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStringMatcher.m; path = Nocilla/Matchers/LSStringMatcher.m; sourceTree = ""; }; 6A5952869E40BF6D9CCDFAA59BB837CD /* Pods-Analytics_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Analytics_Tests.release.xcconfig"; sourceTree = ""; }; + 6AB3944B9D9D2C15A730CE655C94C4F1 /* SPTGlobalBeforeAfterEach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTGlobalBeforeAfterEach.h; path = Specta/Specta/SPTGlobalBeforeAfterEach.h; sourceTree = ""; }; 6B586C9631D8EC14A5F7D93D77325428 /* Pods-Analytics_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Analytics_Example-acknowledgements.markdown"; sourceTree = ""; }; - 6BFC8FB92FF4E63FFC9DCD949A5A3E39 /* SEGReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGReachability.m; sourceTree = ""; }; + 6CA63BF80025A3D25CD928A36136F551 /* EXPMatchers+beFalsy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beFalsy.h"; path = "Expecta/Matchers/EXPMatchers+beFalsy.h"; sourceTree = ""; }; 6D2BE9DB06FECF3E305E95DB3D41624C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 704CDA1E2D73288DAC9C4FDBA881844E /* Specta-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Specta-prefix.pch"; sourceTree = ""; }; + 7245ADF080442E19CC8B85AD6F96A6B6 /* LSASIHTTPRequestHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSASIHTTPRequestHook.m; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.m; sourceTree = ""; }; 725FD454003799E3C5F6FE998212E0D5 /* Pods-Analytics_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Analytics_Tests.debug.xcconfig"; sourceTree = ""; }; - 7687931B86D55C2A3B7570964EEFDEAB /* SpectaUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SpectaUtility.m; path = Specta/Specta/SpectaUtility.m; sourceTree = ""; }; - 77815596D1A590D271917C8C394280E4 /* UIViewController+SEGScreen.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIViewController+SEGScreen.h"; sourceTree = ""; }; - 78F5D31437776FFE9BBCAE5FD37C912E /* EXPMatcherHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPMatcherHelpers.m; path = Expecta/Matchers/EXPMatcherHelpers.m; sourceTree = ""; }; - 79476B660CA0150E072A597FD1928591 /* EXPMatchers+beginWith.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beginWith.h"; path = "Expecta/Matchers/EXPMatchers+beginWith.h"; sourceTree = ""; }; - 798A6CA697ED8D4C6147DC67F0904186 /* SEGSegmentIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGSegmentIntegration.m; sourceTree = ""; }; - 7A21F86A69C9F106AA92ADFA3CD7C46C /* EXPMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPMatcher.h; path = Expecta/EXPMatcher.h; sourceTree = ""; }; - 7D23EA9CCB1E421678FACAC3D02921A8 /* SPTCallSite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTCallSite.m; path = Specta/Specta/SPTCallSite.m; sourceTree = ""; }; + 72ADC84696EDBD1596C7756BC3CAAB31 /* SPTCompiledExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTCompiledExample.m; path = Specta/Specta/SPTCompiledExample.m; sourceTree = ""; }; + 756CD0982961FCE099DA103BA646FD59 /* EXPUnsupportedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPUnsupportedObject.h; path = Expecta/EXPUnsupportedObject.h; sourceTree = ""; }; + 76010B681AA03D877FD5A52AF8E82C9D /* Nocilla-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nocilla-umbrella.h"; sourceTree = ""; }; + 7ABB6B532CF369102165144C3A21CF99 /* SPTCallSite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTCallSite.h; path = Specta/Specta/SPTCallSite.h; sourceTree = ""; }; + 7B15D02A719ABC18B697A175F171D199 /* EXPMatchers+beFalsy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beFalsy.m"; path = "Expecta/Matchers/EXPMatchers+beFalsy.m"; sourceTree = ""; }; + 7B481CF924CBF04F74CC619361CEF2CB /* Expecta.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Expecta.modulemap; sourceTree = ""; }; + 7D31811A6DA375FFEB0CC414383588EA /* Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Expecta.h; path = Expecta/Expecta.h; sourceTree = ""; }; + 7D998F787BB3D83CE6B21CA86B405B46 /* SPTTestSuite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTTestSuite.h; path = Specta/Specta/SPTTestSuite.h; sourceTree = ""; }; + 7E4C7BB766C918FEA55596360DD0B3BB /* EXPDoubleTuple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPDoubleTuple.h; path = Expecta/EXPDoubleTuple.h; sourceTree = ""; }; 7EA5EAF696160B8FCE4415DCB87AC746 /* SEGPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGPayload.h; sourceTree = ""; }; - 7ECE72AD43155832C505F13EE17792AC /* Expecta.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Expecta.modulemap; sourceTree = ""; }; - 8002AEC214B6BB97F584715F86C953D0 /* SPTExcludeGlobalBeforeAfterEach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExcludeGlobalBeforeAfterEach.h; path = Specta/Specta/SPTExcludeGlobalBeforeAfterEach.h; sourceTree = ""; }; - 8130E2C24D57D446CB02B745DEBFDB68 /* SPTExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTExample.m; path = Specta/Specta/SPTExample.m; sourceTree = ""; }; - 82018E76DBBAA11465301FB7614DA196 /* EXPMatchers+respondTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+respondTo.h"; path = "Expecta/Matchers/EXPMatchers+respondTo.h"; sourceTree = ""; }; - 82073CC8763970FDCBB483260EBE0DA1 /* SEGSegmentIntegrationFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGSegmentIntegrationFactory.m; sourceTree = ""; }; + 7FC38653C71A4252F1FD159BB4D1EE4F /* EXPMatchers+beNil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beNil.h"; path = "Expecta/Matchers/EXPMatchers+beNil.h"; sourceTree = ""; }; + 81BC3CC72028638F87B514D1A7853EEB /* EXPMatcherHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPMatcherHelpers.h; path = Expecta/Matchers/EXPMatcherHelpers.h; sourceTree = ""; }; + 81D50D817643B34BE0A6793B8A38C131 /* EXPMatchers+endWith.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+endWith.m"; path = "Expecta/Matchers/EXPMatchers+endWith.m"; sourceTree = ""; }; 82AD8F63C26D2CE260CA18BE7EA484D3 /* Pods-Analytics_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Analytics_Tests-acknowledgements.plist"; sourceTree = ""; }; - 847A5C6956B4E31C6C348C18D4FDBEEA /* EXPMatchers+beSupersetOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beSupersetOf.h"; path = "Expecta/Matchers/EXPMatchers+beSupersetOf.h"; sourceTree = ""; }; + 83A007F3F3B0E1BA3EA6F01CF4311AA2 /* EXPMatchers+equal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+equal.m"; path = "Expecta/Matchers/EXPMatchers+equal.m"; sourceTree = ""; }; + 849F819B79FB3963BEA06E1DA0311A0E /* Nocilla.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nocilla.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 85200ECAD4EA459EB0598420E91F81BE /* Analytics.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Analytics.xcconfig; sourceTree = ""; }; - 87A19FC30FAE97EDA655018A6AD2D54F /* EXPMatchers+beNil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beNil.h"; path = "Expecta/Matchers/EXPMatchers+beNil.h"; sourceTree = ""; }; + 8812DF544FCD5304DFEEDFDB93877EA2 /* SEGAnalyticsUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGAnalyticsUtils.m; sourceTree = ""; }; 89837BDFCC0B7CF62D0A7488C7BBFC59 /* Analytics.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Analytics.modulemap; sourceTree = ""; }; 89C5D8A8204224B87E1F6A95FDB8E531 /* Pods-Analytics_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Analytics_Example-frameworks.sh"; sourceTree = ""; }; - 8B1E626267775D65C6AD256FD479FC31 /* SEGStoreKitTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGStoreKitTracker.h; sourceTree = ""; }; - 8BE369528DB94DD9FD6880DCFAAAAB69 /* EXPUnsupportedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPUnsupportedObject.h; path = Expecta/EXPUnsupportedObject.h; sourceTree = ""; }; - 8FF67CD313329AC05B39AE251B5EA5BB /* SpectaDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaDSL.h; path = Specta/Specta/SpectaDSL.h; sourceTree = ""; }; + 8B1738538FDE483D368712F0D608FC3D /* Nocilla.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nocilla.xcconfig; sourceTree = ""; }; + 8BA4D4B8C6E5AF50AB609E295A01DAE5 /* EXPMatchers+beSupersetOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beSupersetOf.h"; path = "Expecta/Matchers/EXPMatchers+beSupersetOf.h"; sourceTree = ""; }; + 8C45254A956BCDEE1A509CC47D9AE828 /* LSHTTPRequestDiff.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPRequestDiff.m; path = Nocilla/Diff/LSHTTPRequestDiff.m; sourceTree = ""; }; + 8C4F938E8FE97C252FA207D0DD372B65 /* EXPMatchers+raiseWithReason.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+raiseWithReason.m"; path = "Expecta/Matchers/EXPMatchers+raiseWithReason.m"; sourceTree = ""; }; + 8E69917134319E650F4C9F5269A7FDDA /* XCTest+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "XCTest+Private.h"; path = "Specta/Specta/XCTest+Private.h"; sourceTree = ""; }; + 8E8EFD397EC324185FA95501C7A096F7 /* EXPMatchers+postNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+postNotification.h"; path = "Expecta/Matchers/EXPMatchers+postNotification.h"; sourceTree = ""; }; + 8E9DB94FDFB0EDD4A7B005776522AD8F /* EXPExpect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPExpect.m; path = Expecta/EXPExpect.m; sourceTree = ""; }; 907F073F48A74CC1B58FDD4FB141F1A1 /* Pods-Analytics_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Analytics_Example-resources.sh"; sourceTree = ""; }; - 91D17A7188630D4CFFDF216D1B20AD98 /* EXPMatchers+beGreaterThan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beGreaterThan.m"; path = "Expecta/Matchers/EXPMatchers+beGreaterThan.m"; sourceTree = ""; }; - 924BF15B0F1D99CAD6E46F0030F50C50 /* ExpectaSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExpectaSupport.m; path = Expecta/ExpectaSupport.m; sourceTree = ""; }; + 90FBD137D0DEDCABC737FF2FDFBEFCBA /* EXPMatchers+beLessThan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beLessThan.m"; path = "Expecta/Matchers/EXPMatchers+beLessThan.m"; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 93B613869003A3D21F03ECEADC589822 /* EXPMatchers+beNil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beNil.m"; path = "Expecta/Matchers/EXPMatchers+beNil.m"; sourceTree = ""; }; - 9449B56E5FC45BBA8F1D84C3F67E2440 /* SEGSegmentIntegrationFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGSegmentIntegrationFactory.h; sourceTree = ""; }; - 9481427DF2902DFFCDC09936E3C52C6F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 983F42157C09B24C95033E6A987BBF22 /* EXPMatchers+beLessThan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beLessThan.m"; path = "Expecta/Matchers/EXPMatchers+beLessThan.m"; sourceTree = ""; }; - 998914C0B5A68C9A01E1596E02564482 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9D7CCFAC1EBAA3C15A0F34140AEFF8B2 /* SEGAnalyticsRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGAnalyticsRequest.h; sourceTree = ""; }; - 9EF2564A5B3BCF5B727F63C626FF9935 /* NSObject+Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+Expecta.h"; path = "Expecta/NSObject+Expecta.h"; sourceTree = ""; }; - 9F210E4EBA55847B7DD2D64D2AE9699D /* SEGLocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGLocation.m; sourceTree = ""; }; - A0E90BF1DB04C094A5015446308F5C85 /* EXPMatchers+beLessThanOrEqualTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beLessThanOrEqualTo.m"; path = "Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.m"; sourceTree = ""; }; - A1000A875D63BCF2E590201DB9EE9499 /* EXPMatchers+equal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+equal.m"; path = "Expecta/Matchers/EXPMatchers+equal.m"; sourceTree = ""; }; - A125E7E80B5C2A367F184455B08495B1 /* EXPMatchers+raise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+raise.m"; path = "Expecta/Matchers/EXPMatchers+raise.m"; sourceTree = ""; }; + 93DBFFD1B512B8783254B83EE9779BDF /* SEGAnalyticsUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGAnalyticsUtils.h; sourceTree = ""; }; + 94DBD92946E86E0425D0A419D59595F6 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + 952C900BA9FB23A1C1FB1A1ABFFA27EF /* SpectaDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaDSL.h; path = Specta/Specta/SpectaDSL.h; sourceTree = ""; }; + 9A2B067495F18D88E6AAE62ED9A3A952 /* Specta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Specta-dummy.m"; sourceTree = ""; }; + 9B83420442E5AFA48C73D177548DC6AA /* SPTExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTExample.m; path = Specta/Specta/SPTExample.m; sourceTree = ""; }; + 9C86E1F5E7B8BE2BA68A3B6416E532D1 /* EXPMatchers+conformTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+conformTo.m"; path = "Expecta/Matchers/EXPMatchers+conformTo.m"; sourceTree = ""; }; + 9DC968F5E8CEE0A8BDD77E1EB542F982 /* EXPMatchers+beginWith.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beginWith.h"; path = "Expecta/Matchers/EXPMatchers+beginWith.h"; sourceTree = ""; }; + 9EE6D868687E658E956E0558A26DCF81 /* LSStubRequestDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubRequestDSL.m; path = Nocilla/DSL/LSStubRequestDSL.m; sourceTree = ""; }; + A13FC9A2076E24814E723DDDDA085E98 /* Expecta.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Expecta.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A21DCEA714702B96A8020B32249F7F05 /* SEGGroupPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGGroupPayload.h; sourceTree = ""; }; - A24D3400203E04D137441022262A66C2 /* Specta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Specta.xcconfig; sourceTree = ""; }; - A2ABBE8261195A55ED1DFF9A59897512 /* Specta-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Specta-umbrella.h"; sourceTree = ""; }; - A31DB2F213B606BBB124F2A6D10D8417 /* EXPMatchers+beInstanceOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beInstanceOf.h"; path = "Expecta/Matchers/EXPMatchers+beInstanceOf.h"; sourceTree = ""; }; - A415B73CA3799BA7B7F542210E94E91B /* Pods_Analytics_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Analytics_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A32C700EBED12A89A370905134C69E44 /* EXPMatchers+beGreaterThanOrEqualTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beGreaterThanOrEqualTo.h"; path = "Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.h"; sourceTree = ""; }; + A4480B33930A9075D36FFA16677F5113 /* ExpectaObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExpectaObject.m; path = Expecta/ExpectaObject.m; sourceTree = ""; }; + A4DE49C43591ED9234166839F5158A27 /* NSObject+Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+Expecta.h"; path = "Expecta/NSObject+Expecta.h"; sourceTree = ""; }; A5BA035D6043B4036AA1DDF515E27387 /* SEGPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGPayload.m; sourceTree = ""; }; - A86483E009A2C30E3472D0609B2DBFFB /* SPTSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTSpec.h; path = Specta/Specta/SPTSpec.h; sourceTree = ""; }; - AA2364F990290F821A2CB900471FBE2A /* Specta.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Specta.modulemap; sourceTree = ""; }; - AA2D86876643D2803FBF58BD3C0BE625 /* EXPMatchers+beInTheRangeOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beInTheRangeOf.h"; path = "Expecta/Matchers/EXPMatchers+beInTheRangeOf.h"; sourceTree = ""; }; - AAC405455F8E20BD0434D9D3E3D2879A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - ABE29471E8953384B36B17DC33FB8C75 /* XCTestCase+Specta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "XCTestCase+Specta.m"; path = "Specta/Specta/XCTestCase+Specta.m"; sourceTree = ""; }; - AD9A1402E8720FD00C46040083DC9692 /* EXPMatchers+beIdenticalTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beIdenticalTo.h"; path = "Expecta/Matchers/EXPMatchers+beIdenticalTo.h"; sourceTree = ""; }; - AE94674608619558EA8DCEBE8902C148 /* EXPMatchers+contain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+contain.h"; path = "Expecta/Matchers/EXPMatchers+contain.h"; sourceTree = ""; }; - AEF01BA5773CAF9B2F6768A5AEB29504 /* SPTTestSuite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTTestSuite.h; path = Specta/Specta/SPTTestSuite.h; sourceTree = ""; }; - AF080460DC05A5A144E6CAC1177FB0AC /* ExpectaObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExpectaObject.h; path = Expecta/ExpectaObject.h; sourceTree = ""; }; + A68EE479CD32D935ECB7001FAF476988 /* ASIHTTPRequestStub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ASIHTTPRequestStub.h; path = Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.h; sourceTree = ""; }; + A751917E35042705FAA69CC21DBF68E9 /* NSURLRequest+LSHTTPRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLRequest+LSHTTPRequest.m"; path = "Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.m"; sourceTree = ""; }; + A92A84FCFC4ABCF6BE29001116807297 /* EXPMatchers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPMatchers.h; path = Expecta/Matchers/EXPMatchers.h; sourceTree = ""; }; + A97117AD8B3E8115570D2934BF04F744 /* NSData+GZIP.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSData+GZIP.m"; sourceTree = ""; }; + ABD3A8A2E5C2D705B3B2F976221E6748 /* SEGHTTPClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGHTTPClient.m; sourceTree = ""; }; + ACA9E38A9ABB8CFEF3056F4E22836A79 /* SPTSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTSpec.m; path = Specta/Specta/SPTSpec.m; sourceTree = ""; }; + ADAD3ED20015D5D2190C898DE5046699 /* SPTCallSite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTCallSite.m; path = Specta/Specta/SPTCallSite.m; sourceTree = ""; }; + ADD0C2A882D7119AB07E313F15E6308B /* EXPMatchers+beInTheRangeOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beInTheRangeOf.m"; path = "Expecta/Matchers/EXPMatchers+beInTheRangeOf.m"; sourceTree = ""; }; + AE5E4907A3648032A5E52DCB25AF70A2 /* EXPMatchers+postNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+postNotification.m"; path = "Expecta/Matchers/EXPMatchers+postNotification.m"; sourceTree = ""; }; B0D090B0373B3F51B59F99A087DD9876 /* SEGAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGAnalytics.m; sourceTree = ""; }; - B174ECCB055189C835E1613FD300BB85 /* EXPMatchers+respondTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+respondTo.m"; path = "Expecta/Matchers/EXPMatchers+respondTo.m"; sourceTree = ""; }; - B1E10A964BDF82FB9D8785DDE62B649E /* Analytics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Analytics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B320B192BAA2B7B006880B016A39AB10 /* XCTest+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "XCTest+Private.h"; path = "Specta/Specta/XCTest+Private.h"; sourceTree = ""; }; - B3BBEA8D0E2B46A33A73346032F24AAA /* EXPMatchers+beGreaterThan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beGreaterThan.h"; path = "Expecta/Matchers/EXPMatchers+beGreaterThan.h"; sourceTree = ""; }; - B424E5B08CAAABE851C235789EE3EC6B /* ExpectaSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExpectaSupport.h; path = Expecta/ExpectaSupport.h; sourceTree = ""; }; + B3A6B6A256E104C90FB0BA3C77916DAF /* Specta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Specta.xcconfig; sourceTree = ""; }; B588367A6A267BEB469E601813B6475F /* SEGAliasPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGAliasPayload.h; sourceTree = ""; }; - B89BF7315BAB3516AF2A51041DC39C3B /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - BB1D4DB7517A8B41FCDACB1611E880D2 /* SEGBluetooth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGBluetooth.h; sourceTree = ""; }; + B640F7EF833538A7567F2876134FEC3C /* ExpectaSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExpectaSupport.m; path = Expecta/ExpectaSupport.m; sourceTree = ""; }; + B69A66C3DB5045ACF35AE9E9F44D01B6 /* NSURLRequest+DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+DSL.h"; path = "Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.h"; sourceTree = ""; }; + B6E1163F011E3D444A62D529DD550108 /* EXPMatchers+beSubclassOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beSubclassOf.m"; path = "Expecta/Matchers/EXPMatchers+beSubclassOf.m"; sourceTree = ""; }; + B7F90B078EAD016D3617F5FA13AD0878 /* LSHTTPStubURLProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPStubURLProtocol.h; path = Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.h; sourceTree = ""; }; + BA4F20DC01C560722BCBB19127C7A148 /* NSData+Matcheable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+Matcheable.m"; path = "Nocilla/Matchers/NSData+Matcheable.m"; sourceTree = ""; }; + BCC2B009D60DA44006AF374F9AA779D5 /* EXPMatchers+beKindOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beKindOf.h"; path = "Expecta/Matchers/EXPMatchers+beKindOf.h"; sourceTree = ""; }; + BD444BE7AACE3345E729ED0A7EE2E468 /* EXPMatchers+beGreaterThan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beGreaterThan.m"; path = "Expecta/Matchers/EXPMatchers+beGreaterThan.m"; sourceTree = ""; }; + BD66B7A4E6D29687CDA5EDA6122D4FBC /* LSStubRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubRequest.h; path = Nocilla/Stubs/LSStubRequest.h; sourceTree = ""; }; BE093074278010988054D4827E030ABB /* Analytics-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Analytics-dummy.m"; sourceTree = ""; }; - BF3CD05CED877C5E19CB18BA095BC724 /* SPTSharedExampleGroups.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTSharedExampleGroups.m; path = Specta/Specta/SPTSharedExampleGroups.m; sourceTree = ""; }; - C0420BD68EF14CF918B80CF6BEFD7E11 /* Expecta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Expecta.xcconfig; sourceTree = ""; }; - C2D5F98443188468F5CFE556EC251738 /* XCTestCase+Specta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "XCTestCase+Specta.h"; path = "Specta/Specta/XCTestCase+Specta.h"; sourceTree = ""; }; + BE47DB6B3284121632123362631DE174 /* NSRegularExpression+Matcheable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSRegularExpression+Matcheable.m"; path = "Nocilla/Matchers/NSRegularExpression+Matcheable.m"; sourceTree = ""; }; + BEF8786C83B5717F9219906718C628A9 /* LSStubRequestDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubRequestDSL.h; path = Nocilla/DSL/LSStubRequestDSL.h; sourceTree = ""; }; + BFA2BD58C9EFC80EA6F447245DDE8374 /* LSNSURLHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSNSURLHook.h; path = Nocilla/Hooks/NSURLRequest/LSNSURLHook.h; sourceTree = ""; }; + C04ECE5A1F456FEE55631C245E8069F6 /* SEGBluetooth.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGBluetooth.m; sourceTree = ""; }; + C22F0A3F7D136F37CBC921C82913151E /* EXPMatchers+beInstanceOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beInstanceOf.m"; path = "Expecta/Matchers/EXPMatchers+beInstanceOf.m"; sourceTree = ""; }; + C2DEF35243EE7B74E0BADE527AC8E6B0 /* EXPMatchers+beNil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beNil.m"; path = "Expecta/Matchers/EXPMatchers+beNil.m"; sourceTree = ""; }; C39084590F65EF07CEB50F71324CE1B8 /* Analytics-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Analytics-prefix.pch"; sourceTree = ""; }; - C64EEF0B124A45CFB5E4F8D885DD25B8 /* Expecta.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Expecta.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C7A1FE2006A967BE06886C450214BDFE /* SpectaUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaUtility.h; path = Specta/Specta/SpectaUtility.h; sourceTree = ""; }; - C7B5A923D27207113E5B55FE0DACDAD9 /* EXPMatchers+conformTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+conformTo.h"; path = "Expecta/Matchers/EXPMatchers+conformTo.h"; sourceTree = ""; }; - C849D7BC23725EC2DCDC9EB803322052 /* EXPMatchers+beLessThanOrEqualTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beLessThanOrEqualTo.h"; path = "Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.h"; sourceTree = ""; }; + C65D93644F144030CDCAB432512075EB /* EXPMatchers+beInTheRangeOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beInTheRangeOf.h"; path = "Expecta/Matchers/EXPMatchers+beInTheRangeOf.h"; sourceTree = ""; }; + C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; C94F72101EEBF1EDE5E101FC2E6AA35B /* SEGTrackPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGTrackPayload.h; sourceTree = ""; }; - CD8AB60540951BA6FD1F1D9AAB9CACA5 /* SEGSegmentIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGSegmentIntegration.h; sourceTree = ""; }; - CDC92BECE41FDD487136814173CB1558 /* EXPMatchers+raiseWithReason.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+raiseWithReason.m"; path = "Expecta/Matchers/EXPMatchers+raiseWithReason.m"; sourceTree = ""; }; - CDCE1E6823C0AC6058E1F677318C1D0F /* SPTCompiledExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTCompiledExample.h; path = Specta/Specta/SPTCompiledExample.h; sourceTree = ""; }; - D2B17A0DCC328E3F87844037950BA12B /* Pods_Analytics_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Analytics_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CB93789D9F5E4D02164A25D17E4624CB /* SPTCompiledExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTCompiledExample.h; path = Specta/Specta/SPTCompiledExample.h; sourceTree = ""; }; + CBE6515D380AD0A5F2B850991320F479 /* LSNocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSNocilla.h; path = Nocilla/LSNocilla.h; sourceTree = ""; }; + CCE7C8867802A1DE14149AD62F3983F9 /* LSRegexMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSRegexMatcher.h; path = Nocilla/Matchers/LSRegexMatcher.h; sourceTree = ""; }; + CDE10F02F8C6D0A45FF51B31983F2168 /* LSStubRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubRequest.m; path = Nocilla/Stubs/LSStubRequest.m; sourceTree = ""; }; + D170E667AE51D1E486429CF9EB14F8E2 /* EXPBlockDefinedMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPBlockDefinedMatcher.m; path = Expecta/EXPBlockDefinedMatcher.m; sourceTree = ""; }; + D2CFFA1D7BA56478F70ED09046A27493 /* LSMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSMatcher.m; path = Nocilla/Matchers/LSMatcher.m; sourceTree = ""; }; D41DBD56C412C840D2090A4BF5CC6023 /* SEGIdentifyPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGIdentifyPayload.h; sourceTree = ""; }; - D5D7227899132DD711C9B9CF93BD9208 /* SEGReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGReachability.h; sourceTree = ""; }; - D61BC75AB795DFB7AE9CF80D79C1B530 /* Specta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Specta.h; path = Specta/Specta/Specta.h; sourceTree = ""; }; - D6BE4E35D0AA9FEFC1DA27890CBA2A19 /* Expecta-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Expecta-umbrella.h"; sourceTree = ""; }; - D6CF3903D943792CF71D2E59A5FE6602 /* SPTGlobalBeforeAfterEach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTGlobalBeforeAfterEach.h; path = Specta/Specta/SPTGlobalBeforeAfterEach.h; sourceTree = ""; }; + D426F3C587A1858E81CF1CF37308E72B /* SEGStoreKitTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGStoreKitTracker.m; sourceTree = ""; }; + D4AAAFD96AA7809B77E24852A143E81B /* XCTestCase+Specta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "XCTestCase+Specta.h"; path = "Specta/Specta/XCTestCase+Specta.h"; sourceTree = ""; }; + D735F936248170D1FDFD5E59888BA634 /* LSNSURLHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSNSURLHook.m; path = Nocilla/Hooks/NSURLRequest/LSNSURLHook.m; sourceTree = ""; }; + D91118622DEF2A715C0CD5CBA450F494 /* SpectaUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SpectaUtility.m; path = Specta/Specta/SpectaUtility.m; sourceTree = ""; }; D9B88F78DCC30320B400A7DD656E337E /* Pods-Analytics_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Analytics_Example.release.xcconfig"; sourceTree = ""; }; D9C3F42CF3A06C1E082C7CCC116DE867 /* Pods-Analytics_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Analytics_Example.debug.xcconfig"; sourceTree = ""; }; - DA5EBB318D16AE6EC1958DC8510C228D /* EXPDoubleTuple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPDoubleTuple.h; path = Expecta/EXPDoubleTuple.h; sourceTree = ""; }; - DAACC7B2EAAA76EAB129F3A5D74DDC18 /* SPTExampleGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTExampleGroup.m; path = Specta/Specta/SPTExampleGroup.m; sourceTree = ""; }; - DC4CBA4D2825ED03DE841CB750862190 /* EXPFloatTuple.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPFloatTuple.m; path = Expecta/EXPFloatTuple.m; sourceTree = ""; }; + DA87C31144BB044ECD47FB6C44ACB2CC /* EXPMatchers+endWith.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+endWith.h"; path = "Expecta/Matchers/EXPMatchers+endWith.h"; sourceTree = ""; }; + DADA5DCACFCC26BAF81CBA77D5DAA680 /* LSHTTPResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPResponse.h; path = Nocilla/Model/LSHTTPResponse.h; sourceTree = ""; }; + DC8C0425C03478A644814F28209B4B59 /* NSValue+Expecta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSValue+Expecta.m"; path = "Expecta/NSValue+Expecta.m"; sourceTree = ""; }; + DCF1F5F3DBA0F14ACBD55191FE7C28E6 /* ExpectaObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExpectaObject.h; path = Expecta/ExpectaObject.h; sourceTree = ""; }; DE36CBC163E9F3578D7D2552F1BF89DD /* SEGIntegrationFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGIntegrationFactory.h; sourceTree = ""; }; - DEB33EA3C18646B1DA6384B7C356C458 /* NSValue+Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSValue+Expecta.h"; path = "Expecta/NSValue+Expecta.h"; sourceTree = ""; }; - DF4D33F041C8104408EC5CD85F30D247 /* ExpectaObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExpectaObject.m; path = Expecta/ExpectaObject.m; sourceTree = ""; }; - DF5966F05CD1198629BF447653497239 /* EXPMatchers+beInstanceOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beInstanceOf.m"; path = "Expecta/Matchers/EXPMatchers+beInstanceOf.m"; sourceTree = ""; }; - E156AF9341293266845AA8774ED518EA /* EXPMatchers+beFalsy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beFalsy.m"; path = "Expecta/Matchers/EXPMatchers+beFalsy.m"; sourceTree = ""; }; + DE5E8458E16DE72BEC69B0D4B01C6153 /* Analytics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Analytics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DECB1E291A2275FD038BDF383541831A /* EXPMatcherHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPMatcherHelpers.m; path = Expecta/Matchers/EXPMatcherHelpers.m; sourceTree = ""; }; + DED7AF9FB2283EBEA906F2E9D6884D10 /* SEGReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGReachability.m; sourceTree = ""; }; + DF9CDAC774AF1EC88F9AC25D9F7E84AD /* NSData+Matcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+Matcheable.h"; path = "Nocilla/Matchers/NSData+Matcheable.h"; sourceTree = ""; }; + DFA130006D64C9119222D3CC6DEEB97F /* LSStubResponseDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubResponseDSL.m; path = Nocilla/DSL/LSStubResponseDSL.m; sourceTree = ""; }; + E0923798C6DA8B5F02D377F72EBE9220 /* Nocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nocilla.h; path = Nocilla/Nocilla.h; sourceTree = ""; }; + E0DAE6457BDB82C50109C4667531F696 /* EXPMatchers+beSubclassOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beSubclassOf.h"; path = "Expecta/Matchers/EXPMatchers+beSubclassOf.h"; sourceTree = ""; }; E207EDD9318353F4CA3E68BBD2CBFD1B /* SEGTrackPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGTrackPayload.m; sourceTree = ""; }; - E4286F5B187014B00F18766782F7018D /* SPTExampleGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExampleGroup.h; path = Specta/Specta/SPTExampleGroup.h; sourceTree = ""; }; + E36B02538433DEEBA0722170A625F321 /* NSString+Matcheable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Matcheable.m"; path = "Nocilla/Matchers/NSString+Matcheable.m"; sourceTree = ""; }; + E4A58CAACBA17AEF72394FEA6AA92DE2 /* LSRegexMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSRegexMatcher.m; path = Nocilla/Matchers/LSRegexMatcher.m; sourceTree = ""; }; + E5B49F3A2C3775B24797B39C5EDB1D12 /* Specta.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Specta.modulemap; sourceTree = ""; }; + E5FFF41A9A24C033FCC946202869A5C9 /* EXPMatchers+beginWith.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beginWith.m"; path = "Expecta/Matchers/EXPMatchers+beginWith.m"; sourceTree = ""; }; E62394DDB3AB915FBBD83243A8B71230 /* Pods-Analytics_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Analytics_Tests.modulemap"; sourceTree = ""; }; - E64EE1FA2E988E166397F7C5FFFBEBB6 /* EXPUnsupportedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPUnsupportedObject.m; path = Expecta/EXPUnsupportedObject.m; sourceTree = ""; }; - E80C69D4C37874C32C5E8031C34B1E9F /* SEGAnalyticsUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGAnalyticsUtils.m; sourceTree = ""; }; - E8899DDCDB159906296A77EA9F670B8C /* EXPDoubleTuple.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPDoubleTuple.m; path = Expecta/EXPDoubleTuple.m; sourceTree = ""; }; - E8CC760F73E42A321D6401C619837229 /* EXPMatchers+beKindOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beKindOf.m"; path = "Expecta/Matchers/EXPMatchers+beKindOf.m"; sourceTree = ""; }; + E966D79DA0495B118117BE69BA364056 /* SEGSegmentIntegrationFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGSegmentIntegrationFactory.h; sourceTree = ""; }; + E99DE7F5F39C8A3CBB2529A0987A93BE /* SEGReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGReachability.h; sourceTree = ""; }; + E9FBDE3A5453A6D3F1AC72AAF9DEFF36 /* Specta-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Specta-prefix.pch"; sourceTree = ""; }; EA0B4D0A1C53C864E5FBB5AD62ACFBA5 /* Pods-Analytics_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Analytics_Example-acknowledgements.plist"; sourceTree = ""; }; - ED05564542683A1E240E5097EC7B86DC /* EXPMatchers+beInTheRangeOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beInTheRangeOf.m"; path = "Expecta/Matchers/EXPMatchers+beInTheRangeOf.m"; sourceTree = ""; }; - F3841AF1D8E631E333341008419AF1A1 /* EXPMatchers+haveCountOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+haveCountOf.m"; path = "Expecta/Matchers/EXPMatchers+haveCountOf.m"; sourceTree = ""; }; + EA4C6FC11C1430748A8424DE661C017A /* LSHTTPRequestDSLRepresentation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPRequestDSLRepresentation.m; path = Nocilla/DSL/LSHTTPRequestDSLRepresentation.m; sourceTree = ""; }; + EAA0B0D8410A748100182967B6BD8E5D /* ExpectaSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExpectaSupport.h; path = Expecta/ExpectaSupport.h; sourceTree = ""; }; + EAEEC0CE4F05D24E0928BD1776E06892 /* NSString+Nocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Nocilla.h"; path = "Nocilla/Categories/NSString+Nocilla.h"; sourceTree = ""; }; + EB6E879A49A59A04DF43FA52A7B9ABC5 /* SPTSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTSpec.h; path = Specta/Specta/SPTSpec.h; sourceTree = ""; }; + ECF26B74CC2081100643793D5A3CB1CF /* LSHTTPStubURLProtocol.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPStubURLProtocol.m; path = Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.m; sourceTree = ""; }; + ED7B697D020FD4EE3EBBE0801C80017A /* SPTExampleGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExampleGroup.h; path = Specta/Specta/SPTExampleGroup.h; sourceTree = ""; }; + EE3D70C67390C71AD4017AC6A272273A /* SEGLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGLocation.h; sourceTree = ""; }; + EECB3EED6027FDABD7D3EAF6A92E046F /* SpectaDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SpectaDSL.m; path = Specta/Specta/SpectaDSL.m; sourceTree = ""; }; + EEF47FCE12FE6BAF3EC7CB54E86434D7 /* NSRegularExpression+Matcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRegularExpression+Matcheable.h"; path = "Nocilla/Matchers/NSRegularExpression+Matcheable.h"; sourceTree = ""; }; + EF85FBA44D56783D225C6A37BF642E1D /* SEGBluetooth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGBluetooth.h; sourceTree = ""; }; + F0C23C26D420E80AD34DF7B0996B25E8 /* NSValue+Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSValue+Expecta.h"; path = "Expecta/NSValue+Expecta.h"; sourceTree = ""; }; + F13E1AE89B0F592308CBD954E0C4FA45 /* LSASIHTTPRequestAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSASIHTTPRequestAdapter.m; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.m; sourceTree = ""; }; + F4E609243D8AB1B2E70A8F2C5E9F7186 /* EXPMatchers+beLessThan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beLessThan.h"; path = "Expecta/Matchers/EXPMatchers+beLessThan.h"; sourceTree = ""; }; + F5268D4F677423311AF279E51E02717D /* SPTSharedExampleGroups.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTSharedExampleGroups.h; path = Specta/Specta/SPTSharedExampleGroups.h; sourceTree = ""; }; + F6FCFB90F9A4F2EC5FC71A3E0A0D4D48 /* LSHTTPRequestDiff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPRequestDiff.h; path = Nocilla/Diff/LSHTTPRequestDiff.h; sourceTree = ""; }; + F7BCD1C92A55911C16FB9E6D60078BDE /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F8115C1476FCC21E22C39FDAC8BB6EB8 /* Analytics-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Analytics-umbrella.h"; sourceTree = ""; }; - FBF30858E3C4F8F822AB008755EC09E9 /* EXPMatchers+equal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+equal.h"; path = "Expecta/Matchers/EXPMatchers+equal.h"; sourceTree = ""; }; - FD3A245D75F8D2D0FFAD5230F5925974 /* Expecta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Expecta-dummy.m"; sourceTree = ""; }; + F8843B0B76B48BC52F8BE7AD151C48C7 /* EXPMatchers+match.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+match.m"; path = "Expecta/Matchers/EXPMatchers+match.m"; sourceTree = ""; }; + F99FFAD3309B4F39F8BE9FF058F500C0 /* LSASIHTTPRequestAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSASIHTTPRequestAdapter.h; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.h; sourceTree = ""; }; + FA0033E115AA6BF02ED6E80505926A94 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FB8EAF8AD870197091A669E2F17D31C7 /* LSStubResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubResponse.h; path = Nocilla/Stubs/LSStubResponse.h; sourceTree = ""; }; + FCB28A78CDBB39AB53186AED8F73F51A /* SPTExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExample.h; path = Specta/Specta/SPTExample.h; sourceTree = ""; }; + FE0F7A461D70E6027BC573A58C77C205 /* LSStubResponseDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubResponseDSL.h; path = Nocilla/DSL/LSStubResponseDSL.h; sourceTree = ""; }; + FEEF1CCD4245A7A1DD5741CB920D2D0D /* EXPMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPMatcher.h; path = Expecta/EXPMatcher.h; sourceTree = ""; }; + FF07B106FDF73E8D4F03156F20D105A1 /* Expecta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Expecta.xcconfig; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5544961483502190CD0CF4B999B8D8D3 /* Frameworks */ = { + 295390A1C2CFD9AC4C9337AB4E32FD5A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CC851D11E424063A8E2E79C4ABADB8D9 /* Foundation.framework in Frameworks */, - F55241E33F19FCA9DE7690D34FD9982B /* XCTest.framework in Frameworks */, + F4043CFB6D8E069D3879DA09F202715F /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B6094D4FDD15EED485201D6DE465AFF5 /* Frameworks */ = { + 5411DB9B18977D922142BB1F6696F0FF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 183609639E124198767341441931D06D /* Foundation.framework in Frameworks */, + 036DC31354B4DFA82ABC0D96D68D1DF6 /* Foundation.framework in Frameworks */, + 02F6B0D7B86AB56F90307DB23E661896 /* XCTest.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C2793424E2A34C45E85B21D0E7487F2A /* Frameworks */ = { + 5F40817F9BD61376555E224A54C77911 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 84A1E9622EDC1FA0E2329F8BC867894F /* Foundation.framework in Frameworks */, + 21B9BDF15D08F33883999509AC98847C /* CFNetwork.framework in Frameworks */, + 80C451D6026B1C2BF6EF917B4F5BF98B /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B6094D4FDD15EED485201D6DE465AFF5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 183609639E124198767341441931D06D /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -444,37 +582,12 @@ path = ../..; sourceTree = ""; }; - 1088FF28BA9FACD5476F3304D0FEA7E9 /* Specta */ = { + 122DA2E5084A4393C29BE363C764795C /* Frameworks */ = { isa = PBXGroup; children = ( - D61BC75AB795DFB7AE9CF80D79C1B530 /* Specta.h */, - 8FF67CD313329AC05B39AE251B5EA5BB /* SpectaDSL.h */, - 621D45D57ACA8E38D852A1E07D2AD679 /* SpectaDSL.m */, - 51F8C648CB722FE51238487FAECC1517 /* SpectaTypes.h */, - C7A1FE2006A967BE06886C450214BDFE /* SpectaUtility.h */, - 7687931B86D55C2A3B7570964EEFDEAB /* SpectaUtility.m */, - 04BBCCE13322F42620459D20E8DE3673 /* SPTCallSite.h */, - 7D23EA9CCB1E421678FACAC3D02921A8 /* SPTCallSite.m */, - CDCE1E6823C0AC6058E1F677318C1D0F /* SPTCompiledExample.h */, - 1DF8BC2C6730675F74DD28A442535501 /* SPTCompiledExample.m */, - 68F820C46D336F1E6EB733BFC4374C51 /* SPTExample.h */, - 8130E2C24D57D446CB02B745DEBFDB68 /* SPTExample.m */, - E4286F5B187014B00F18766782F7018D /* SPTExampleGroup.h */, - DAACC7B2EAAA76EAB129F3A5D74DDC18 /* SPTExampleGroup.m */, - 8002AEC214B6BB97F584715F86C953D0 /* SPTExcludeGlobalBeforeAfterEach.h */, - D6CF3903D943792CF71D2E59A5FE6602 /* SPTGlobalBeforeAfterEach.h */, - 06C1DD363D5966F42C4D802641B4CEEA /* SPTSharedExampleGroups.h */, - BF3CD05CED877C5E19CB18BA095BC724 /* SPTSharedExampleGroups.m */, - A86483E009A2C30E3472D0609B2DBFFB /* SPTSpec.h */, - 3B236E34C19DC967CCE978293BCF8C5E /* SPTSpec.m */, - AEF01BA5773CAF9B2F6768A5AEB29504 /* SPTTestSuite.h */, - 113855CF66A69F6876546E978AC2362E /* SPTTestSuite.m */, - B320B192BAA2B7B006880B016A39AB10 /* XCTest+Private.h */, - C2D5F98443188468F5CFE556EC251738 /* XCTestCase+Specta.h */, - ABE29471E8953384B36B17DC33FB8C75 /* XCTestCase+Specta.m */, - 4DA3602D7F8FAD5F91C232D4D61D417D /* Support Files */, + 79A548EA8CA197E1E2EE397EB587F597 /* iOS */, ); - path = Specta; + name = Frameworks; sourceTree = ""; }; 22E858A8EDF9F45357D9A2FA9C9BB6AC /* Targets Support Files */ = { @@ -486,26 +599,18 @@ name = "Targets Support Files"; sourceTree = ""; }; - 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { - isa = PBXGroup; - children = ( - D24B2EA016AE4FABDB5AF17F3FD9C222 /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - 4DA3602D7F8FAD5F91C232D4D61D417D /* Support Files */ = { + 38FA5E5388C2478DF05AE925F651E6C2 /* Support Files */ = { isa = PBXGroup; children = ( - 998914C0B5A68C9A01E1596E02564482 /* Info.plist */, - AA2364F990290F821A2CB900471FBE2A /* Specta.modulemap */, - A24D3400203E04D137441022262A66C2 /* Specta.xcconfig */, - 2A1EC781C67B94698BC0FD79F6926656 /* Specta-dummy.m */, - 704CDA1E2D73288DAC9C4FDBA881844E /* Specta-prefix.pch */, - A2ABBE8261195A55ED1DFF9A59897512 /* Specta-umbrella.h */, + 7B481CF924CBF04F74CC619361CEF2CB /* Expecta.modulemap */, + FF07B106FDF73E8D4F03156F20D105A1 /* Expecta.xcconfig */, + 1D7E90431DC0B8E1E7403353232CC41A /* Expecta-dummy.m */, + 215FA13C8BB3701687A65C35407C888C /* Expecta-prefix.pch */, + 36CEB42FC801D6DD1C0C86F8D5A6B031 /* Expecta-umbrella.h */, + FA0033E115AA6BF02ED6E80505926A94 /* Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/Specta"; + path = "../Target Support Files/Expecta"; sourceTree = ""; }; 4E338C8CF4A9B4870206743856F8776B /* Support Files */ = { @@ -548,85 +653,67 @@ path = "Target Support Files/Pods-Analytics_Tests"; sourceTree = ""; }; - 642CBADE05AB7AED541CB2A072F3023A /* Expecta */ = { + 71ED81143BA7E918AC081A81B3307DAE /* Nocilla */ = { isa = PBXGroup; children = ( - 04D6221AD6AD261B601F9711E749A5D5 /* EXPBlockDefinedMatcher.h */, - 4F67D8E8E16F0E77A2D4E5F714CEBC41 /* EXPBlockDefinedMatcher.m */, - 0D742C36417083F91C50620C170817D1 /* EXPDefines.h */, - DA5EBB318D16AE6EC1958DC8510C228D /* EXPDoubleTuple.h */, - E8899DDCDB159906296A77EA9F670B8C /* EXPDoubleTuple.m */, - 1F9EE98E21A0C637A4E0FE3B6F402DAD /* Expecta.h */, - AF080460DC05A5A144E6CAC1177FB0AC /* ExpectaObject.h */, - DF4D33F041C8104408EC5CD85F30D247 /* ExpectaObject.m */, - B424E5B08CAAABE851C235789EE3EC6B /* ExpectaSupport.h */, - 924BF15B0F1D99CAD6E46F0030F50C50 /* ExpectaSupport.m */, - 67473F09A0FADF52D476EA88F48CFA54 /* EXPExpect.h */, - 3F32E405A85135EDBCBF4765A6BB530B /* EXPExpect.m */, - 17B271C769948413B2D6A2FA5FA661F5 /* EXPFloatTuple.h */, - DC4CBA4D2825ED03DE841CB750862190 /* EXPFloatTuple.m */, - 7A21F86A69C9F106AA92ADFA3CD7C46C /* EXPMatcher.h */, - 27576C638FD3AB691E7F4FB1E3980464 /* EXPMatcherHelpers.h */, - 78F5D31437776FFE9BBCAE5FD37C912E /* EXPMatcherHelpers.m */, - 2AFD77F6B582228E3C05EB3F700225A9 /* EXPMatchers.h */, - 3B6DF8F89EC26F944197244B9F2AAB15 /* EXPMatchers+beCloseTo.h */, - 5BE4506716AF52468B3550AD5824670F /* EXPMatchers+beCloseTo.m */, - 5E711193023B1623B4622AA72E1B5DB2 /* EXPMatchers+beFalsy.h */, - E156AF9341293266845AA8774ED518EA /* EXPMatchers+beFalsy.m */, - 79476B660CA0150E072A597FD1928591 /* EXPMatchers+beginWith.h */, - 5D431759C2312628BAF106B8D2CC8DB2 /* EXPMatchers+beginWith.m */, - B3BBEA8D0E2B46A33A73346032F24AAA /* EXPMatchers+beGreaterThan.h */, - 91D17A7188630D4CFFDF216D1B20AD98 /* EXPMatchers+beGreaterThan.m */, - 592E81109E597E27A3D9DBB86ABBE590 /* EXPMatchers+beGreaterThanOrEqualTo.h */, - 2CF861D2ADFE89409C39B6E076059DCE /* EXPMatchers+beGreaterThanOrEqualTo.m */, - AD9A1402E8720FD00C46040083DC9692 /* EXPMatchers+beIdenticalTo.h */, - 279DF95762E948BE7B719A7F673E9E56 /* EXPMatchers+beIdenticalTo.m */, - A31DB2F213B606BBB124F2A6D10D8417 /* EXPMatchers+beInstanceOf.h */, - DF5966F05CD1198629BF447653497239 /* EXPMatchers+beInstanceOf.m */, - AA2D86876643D2803FBF58BD3C0BE625 /* EXPMatchers+beInTheRangeOf.h */, - ED05564542683A1E240E5097EC7B86DC /* EXPMatchers+beInTheRangeOf.m */, - 186D37D789BDC5806713AC08D0BD0452 /* EXPMatchers+beKindOf.h */, - E8CC760F73E42A321D6401C619837229 /* EXPMatchers+beKindOf.m */, - 42EC02837F7465B7AED8E1A256D57C91 /* EXPMatchers+beLessThan.h */, - 983F42157C09B24C95033E6A987BBF22 /* EXPMatchers+beLessThan.m */, - C849D7BC23725EC2DCDC9EB803322052 /* EXPMatchers+beLessThanOrEqualTo.h */, - A0E90BF1DB04C094A5015446308F5C85 /* EXPMatchers+beLessThanOrEqualTo.m */, - 87A19FC30FAE97EDA655018A6AD2D54F /* EXPMatchers+beNil.h */, - 93B613869003A3D21F03ECEADC589822 /* EXPMatchers+beNil.m */, - 1F5CF0D3894D4FC1B84CF0F527D0D766 /* EXPMatchers+beSubclassOf.h */, - 3ACF80B5A24CE07B6C736EEF474E7E9C /* EXPMatchers+beSubclassOf.m */, - 847A5C6956B4E31C6C348C18D4FDBEEA /* EXPMatchers+beSupersetOf.h */, - 1B06F4EDF054A24295A7BD524587CABC /* EXPMatchers+beSupersetOf.m */, - 67324AA26715C0742B62E59D0AAB374C /* EXPMatchers+beTruthy.h */, - 408EA78FA928332DAE21B1527BCC7A2F /* EXPMatchers+beTruthy.m */, - C7B5A923D27207113E5B55FE0DACDAD9 /* EXPMatchers+conformTo.h */, - 51F770E0A0B3B0D2789D92A52AD3ABAE /* EXPMatchers+conformTo.m */, - AE94674608619558EA8DCEBE8902C148 /* EXPMatchers+contain.h */, - 31695F545CD3669506497ADBB22873F6 /* EXPMatchers+contain.m */, - 177EE8E7DD8C4226F8E15FE4C447154D /* EXPMatchers+endWith.h */, - 5B01F350337B25F09061F55C2252CBD6 /* EXPMatchers+endWith.m */, - FBF30858E3C4F8F822AB008755EC09E9 /* EXPMatchers+equal.h */, - A1000A875D63BCF2E590201DB9EE9499 /* EXPMatchers+equal.m */, - 5E20292CF7B63EA8E98399EF2352F73D /* EXPMatchers+haveCountOf.h */, - F3841AF1D8E631E333341008419AF1A1 /* EXPMatchers+haveCountOf.m */, - 36BB29C27B61C055294A8316529A8EF8 /* EXPMatchers+match.h */, - 5BC48829A0EB26D4DD51CD2AA4B0FE74 /* EXPMatchers+match.m */, - 124408F448490BCF39CC1C2AA5297197 /* EXPMatchers+postNotification.h */, - 393405584126BC701B16CB695FBEC1B0 /* EXPMatchers+postNotification.m */, - 33C929F06DEC760FA0B134E8F8D1C9FA /* EXPMatchers+raise.h */, - A125E7E80B5C2A367F184455B08495B1 /* EXPMatchers+raise.m */, - 65DA28E34D6B2634B0D3632970B9AFD0 /* EXPMatchers+raiseWithReason.h */, - CDC92BECE41FDD487136814173CB1558 /* EXPMatchers+raiseWithReason.m */, - 82018E76DBBAA11465301FB7614DA196 /* EXPMatchers+respondTo.h */, - B174ECCB055189C835E1613FD300BB85 /* EXPMatchers+respondTo.m */, - 8BE369528DB94DD9FD6880DCFAAAAB69 /* EXPUnsupportedObject.h */, - E64EE1FA2E988E166397F7C5FFFBEBB6 /* EXPUnsupportedObject.m */, - 9EF2564A5B3BCF5B727F63C626FF9935 /* NSObject+Expecta.h */, - DEB33EA3C18646B1DA6384B7C356C458 /* NSValue+Expecta.h */, - 2499EDF4CE48DC7D295875D373CE6ACB /* NSValue+Expecta.m */, - 8B13E7675CDFD3E42F7D76EFC061BDE1 /* Support Files */, + A68EE479CD32D935ECB7001FAF476988 /* ASIHTTPRequestStub.h */, + 1F6BBFF3ED908BBB61D8B043C744FDF2 /* ASIHTTPRequestStub.m */, + F99FFAD3309B4F39F8BE9FF058F500C0 /* LSASIHTTPRequestAdapter.h */, + F13E1AE89B0F592308CBD954E0C4FA45 /* LSASIHTTPRequestAdapter.m */, + 4F6572099C332D69E0D8AEF41D4F9F83 /* LSASIHTTPRequestHook.h */, + 7245ADF080442E19CC8B85AD6F96A6B6 /* LSASIHTTPRequestHook.m */, + 048D94BE82C84555D409A93BF039EEE5 /* LSDataMatcher.h */, + 47FF6EF9E62A9175DF61CE4FC4F0CBCF /* LSDataMatcher.m */, + 166736907F1E5180FC092545C416D144 /* LSHTTPBody.h */, + 04CC74C4C61327B9C4DF18957B7812E3 /* LSHTTPClientHook.h */, + 2C8DB76D2A3AF8110BA31D031027E4D5 /* LSHTTPClientHook.m */, + 5750F85C4001818E251789B8C0029267 /* LSHTTPRequest.h */, + F6FCFB90F9A4F2EC5FC71A3E0A0D4D48 /* LSHTTPRequestDiff.h */, + 8C45254A956BCDEE1A509CC47D9AE828 /* LSHTTPRequestDiff.m */, + 15457E7901D93551F110977610781944 /* LSHTTPRequestDSLRepresentation.h */, + EA4C6FC11C1430748A8424DE661C017A /* LSHTTPRequestDSLRepresentation.m */, + DADA5DCACFCC26BAF81CBA77D5DAA680 /* LSHTTPResponse.h */, + B7F90B078EAD016D3617F5FA13AD0878 /* LSHTTPStubURLProtocol.h */, + ECF26B74CC2081100643793D5A3CB1CF /* LSHTTPStubURLProtocol.m */, + 5526DDE7CBC2FA01EE8D2FDDCB4D8815 /* LSMatcheable.h */, + 0381D6093D21AFDDE30CFE22F3BB680D /* LSMatcher.h */, + D2CFFA1D7BA56478F70ED09046A27493 /* LSMatcher.m */, + CBE6515D380AD0A5F2B850991320F479 /* LSNocilla.h */, + 2D88FCD425720D9CDAA8CF432423A50E /* LSNocilla.m */, + BFA2BD58C9EFC80EA6F447245DDE8374 /* LSNSURLHook.h */, + D735F936248170D1FDFD5E59888BA634 /* LSNSURLHook.m */, + 25F5A3115A623DA04AA16CFEC74F2EF9 /* LSNSURLSessionHook.h */, + 4DC44F50C0C0B23F18EEA2E4452A285E /* LSNSURLSessionHook.m */, + CCE7C8867802A1DE14149AD62F3983F9 /* LSRegexMatcher.h */, + E4A58CAACBA17AEF72394FEA6AA92DE2 /* LSRegexMatcher.m */, + 5EA21B0A0686B2730612CAA48E246F7C /* LSStringMatcher.h */, + 68EA8E41E380502BF92641F1CCBA68CA /* LSStringMatcher.m */, + BD66B7A4E6D29687CDA5EDA6122D4FBC /* LSStubRequest.h */, + CDE10F02F8C6D0A45FF51B31983F2168 /* LSStubRequest.m */, + BEF8786C83B5717F9219906718C628A9 /* LSStubRequestDSL.h */, + 9EE6D868687E658E956E0558A26DCF81 /* LSStubRequestDSL.m */, + FB8EAF8AD870197091A669E2F17D31C7 /* LSStubResponse.h */, + 372CBB8F4D124EFE07566B3EFBA4352E /* LSStubResponse.m */, + FE0F7A461D70E6027BC573A58C77C205 /* LSStubResponseDSL.h */, + DFA130006D64C9119222D3CC6DEEB97F /* LSStubResponseDSL.m */, + E0923798C6DA8B5F02D377F72EBE9220 /* Nocilla.h */, + DF9CDAC774AF1EC88F9AC25D9F7E84AD /* NSData+Matcheable.h */, + BA4F20DC01C560722BCBB19127C7A148 /* NSData+Matcheable.m */, + 58EF9D321A4473CCBF2CF307F3A716A1 /* NSData+Nocilla.h */, + 04102C8A636C2565CCD3FBB08DA3B957 /* NSData+Nocilla.m */, + EEF47FCE12FE6BAF3EC7CB54E86434D7 /* NSRegularExpression+Matcheable.h */, + BE47DB6B3284121632123362631DE174 /* NSRegularExpression+Matcheable.m */, + 5FE58475FA0CB0C2C3DDBABEA84C6676 /* NSString+Matcheable.h */, + E36B02538433DEEBA0722170A625F321 /* NSString+Matcheable.m */, + EAEEC0CE4F05D24E0928BD1776E06892 /* NSString+Nocilla.h */, + 3BCC19A1ADDDD255485E6F7519161F9B /* NSString+Nocilla.m */, + B69A66C3DB5045ACF35AE9E9F44D01B6 /* NSURLRequest+DSL.h */, + 56F3BF36F4B28877AED0C75CDB6C2CF9 /* NSURLRequest+DSL.m */, + 57F611336E125F4ECBD6F0DF8F8CB0C5 /* NSURLRequest+LSHTTPRequest.h */, + A751917E35042705FAA69CC21DBF68E9 /* NSURLRequest+LSHTTPRequest.m */, + F9E04FF06D5A3859C051A05DAACB955D /* Support Files */, ); - path = Expecta; + path = Nocilla; sourceTree = ""; }; 73B4D7F433FF7CDE64ADEDD8F067FAAA /* Classes */ = { @@ -635,71 +722,114 @@ 4B18B8410C6425F24B866CBDB74CABBF /* SEGAnalytics.h */, B0D090B0373B3F51B59F99A087DD9876 /* SEGAnalytics.m */, 0DEF4498594535AD5FA00D8449F00753 /* Integrations */, - 865274004FC4C5E6835559A1D2B2BEFB /* Internal */, + 823CD0CAB563A5CA59C9C8BC1F96838D /* Internal */, ); path = Classes; sourceTree = ""; }; - 7DB346D0F39D3F0E887471402A8071AB = { + 748E7CDBA176523AE9C02F0D1EE0702E /* Products */ = { isa = PBXGroup; children = ( - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - 57D6717C390BF483789FC8580F914321 /* Development Pods */, - 433CD3331B6C3787F473C941B61FC68F /* Frameworks */, - 832799A4B323B60613D70B37F74AE952 /* Pods */, - CE463C2540F7135F6A1E3F0D77FD4E0D /* Products */, - 22E858A8EDF9F45357D9A2FA9C9BB6AC /* Targets Support Files */, + DE5E8458E16DE72BEC69B0D4B01C6153 /* Analytics.framework */, + A13FC9A2076E24814E723DDDDA085E98 /* Expecta.framework */, + 849F819B79FB3963BEA06E1DA0311A0E /* Nocilla.framework */, + 4B8950BFD3FA25B2C9EB3A08FF93CE3E /* Pods_Analytics_Example.framework */, + 3291A964D3603A2B35E61C43E1D54DA2 /* Pods_Analytics_Tests.framework */, + 0A10D5AEA0D81AFFED07D5B506817936 /* Specta.framework */, ); + name = Products; sourceTree = ""; }; - 832799A4B323B60613D70B37F74AE952 /* Pods */ = { + 7945FFFFC4122DCC65EFCAA12AC60F1A /* Specta */ = { isa = PBXGroup; children = ( - 642CBADE05AB7AED541CB2A072F3023A /* Expecta */, - 1088FF28BA9FACD5476F3304D0FEA7E9 /* Specta */, + 41657CB8575AD4F6ED3C41808EFBAAFF /* Specta.h */, + 952C900BA9FB23A1C1FB1A1ABFFA27EF /* SpectaDSL.h */, + EECB3EED6027FDABD7D3EAF6A92E046F /* SpectaDSL.m */, + 271512C3D7207E4C56D018B95B7531C0 /* SpectaTypes.h */, + 35910C380D55DE8C13B47AB42B48125D /* SpectaUtility.h */, + D91118622DEF2A715C0CD5CBA450F494 /* SpectaUtility.m */, + 7ABB6B532CF369102165144C3A21CF99 /* SPTCallSite.h */, + ADAD3ED20015D5D2190C898DE5046699 /* SPTCallSite.m */, + CB93789D9F5E4D02164A25D17E4624CB /* SPTCompiledExample.h */, + 72ADC84696EDBD1596C7756BC3CAAB31 /* SPTCompiledExample.m */, + FCB28A78CDBB39AB53186AED8F73F51A /* SPTExample.h */, + 9B83420442E5AFA48C73D177548DC6AA /* SPTExample.m */, + ED7B697D020FD4EE3EBBE0801C80017A /* SPTExampleGroup.h */, + 420D34612C84353D8EE232B5BE7A6593 /* SPTExampleGroup.m */, + 07A9FBDBCA6592F4689ED88CC150A26F /* SPTExcludeGlobalBeforeAfterEach.h */, + 6AB3944B9D9D2C15A730CE655C94C4F1 /* SPTGlobalBeforeAfterEach.h */, + F5268D4F677423311AF279E51E02717D /* SPTSharedExampleGroups.h */, + 24565F37B7304C172A8154C3A695BDCB /* SPTSharedExampleGroups.m */, + EB6E879A49A59A04DF43FA52A7B9ABC5 /* SPTSpec.h */, + ACA9E38A9ABB8CFEF3056F4E22836A79 /* SPTSpec.m */, + 7D998F787BB3D83CE6B21CA86B405B46 /* SPTTestSuite.h */, + 44FB4DDE2873BC99C9529F866BA25D18 /* SPTTestSuite.m */, + 8E69917134319E650F4C9F5269A7FDDA /* XCTest+Private.h */, + D4AAAFD96AA7809B77E24852A143E81B /* XCTestCase+Specta.h */, + 0B69B1E64147D5B5D22E6B8CAF1955AA /* XCTestCase+Specta.m */, + B3200B86C84628196CBF2170E3DFB4FF /* Support Files */, ); - name = Pods; + path = Specta; sourceTree = ""; }; - 865274004FC4C5E6835559A1D2B2BEFB /* Internal */ = { + 79A548EA8CA197E1E2EE397EB587F597 /* iOS */ = { isa = PBXGroup; children = ( - 01A7A9FEEDB7BABBBDF8C9FE1239501F /* NSData+GZIP.h */, - 50FE9A09D0B93D03944E207CDDE1B51F /* NSData+GZIP.m */, - 9D7CCFAC1EBAA3C15A0F34140AEFF8B2 /* SEGAnalyticsRequest.h */, - 0E63DBA4A7397B4C015789AB4075AA7D /* SEGAnalyticsRequest.m */, - 3A9CB1F11CBD9FB136A49748F09C22C3 /* SEGAnalyticsUtils.h */, - E80C69D4C37874C32C5E8031C34B1E9F /* SEGAnalyticsUtils.m */, - BB1D4DB7517A8B41FCDACB1611E880D2 /* SEGBluetooth.h */, - 690736929497BF866D7685E3620A13AC /* SEGBluetooth.m */, - 2876CC923D39E95B69C6461DB0732B2F /* SEGLocation.h */, - 9F210E4EBA55847B7DD2D64D2AE9699D /* SEGLocation.m */, - D5D7227899132DD711C9B9CF93BD9208 /* SEGReachability.h */, - 6BFC8FB92FF4E63FFC9DCD949A5A3E39 /* SEGReachability.m */, - CD8AB60540951BA6FD1F1D9AAB9CACA5 /* SEGSegmentIntegration.h */, - 798A6CA697ED8D4C6147DC67F0904186 /* SEGSegmentIntegration.m */, - 9449B56E5FC45BBA8F1D84C3F67E2440 /* SEGSegmentIntegrationFactory.h */, - 82073CC8763970FDCBB483260EBE0DA1 /* SEGSegmentIntegrationFactory.m */, - 8B1E626267775D65C6AD256FD479FC31 /* SEGStoreKitTracker.h */, - 084806D4CE744B86C95FBEF56EC7529E /* SEGStoreKitTracker.m */, - 77815596D1A590D271917C8C394280E4 /* UIViewController+SEGScreen.h */, - 231107913CCC73928F45805FECF6CF28 /* UIViewController+SEGScreen.m */, + 94DBD92946E86E0425D0A419D59595F6 /* CFNetwork.framework */, + C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */, + 348E28395AC3E9B59263F66C9B316799 /* XCTest.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + 57D6717C390BF483789FC8580F914321 /* Development Pods */, + 122DA2E5084A4393C29BE363C764795C /* Frameworks */, + 9439D2F0B30AF4FE53082605AEF81C2F /* Pods */, + 748E7CDBA176523AE9C02F0D1EE0702E /* Products */, + 22E858A8EDF9F45357D9A2FA9C9BB6AC /* Targets Support Files */, + ); + sourceTree = ""; + }; + 823CD0CAB563A5CA59C9C8BC1F96838D /* Internal */ = { + isa = PBXGroup; + children = ( + 4B3FB8815830BA6655399E9878E181BA /* NSData+GZIP.h */, + A97117AD8B3E8115570D2934BF04F744 /* NSData+GZIP.m */, + 93DBFFD1B512B8783254B83EE9779BDF /* SEGAnalyticsUtils.h */, + 8812DF544FCD5304DFEEDFDB93877EA2 /* SEGAnalyticsUtils.m */, + EF85FBA44D56783D225C6A37BF642E1D /* SEGBluetooth.h */, + C04ECE5A1F456FEE55631C245E8069F6 /* SEGBluetooth.m */, + 4B9E5ADCBDC4F69D8EA948FF51B0D0AB /* SEGHTTPClient.h */, + ABD3A8A2E5C2D705B3B2F976221E6748 /* SEGHTTPClient.m */, + EE3D70C67390C71AD4017AC6A272273A /* SEGLocation.h */, + 667F12E8A368666B10A4BD060F0E1FC5 /* SEGLocation.m */, + E99DE7F5F39C8A3CBB2529A0987A93BE /* SEGReachability.h */, + DED7AF9FB2283EBEA906F2E9D6884D10 /* SEGReachability.m */, + 2C3C10DA689CED703B1405801BFD4ED6 /* SEGSegmentIntegration.h */, + 1F504EDCF181E37EA1125AA0272409FE /* SEGSegmentIntegration.m */, + E966D79DA0495B118117BE69BA364056 /* SEGSegmentIntegrationFactory.h */, + 2D65CF2F4ADA2B0AF79D7D23F00EC344 /* SEGSegmentIntegrationFactory.m */, + 1FFBDA242621DB525DC5C434ECEB07D8 /* SEGStoreKitTracker.h */, + D426F3C587A1858E81CF1CF37308E72B /* SEGStoreKitTracker.m */, + 1E33D9C28142DB3C7545C518B07D7F00 /* UIViewController+SEGScreen.h */, + 62325BDEE6F739C800DD201DE7266003 /* UIViewController+SEGScreen.m */, ); path = Internal; sourceTree = ""; }; - 8B13E7675CDFD3E42F7D76EFC061BDE1 /* Support Files */ = { + 9439D2F0B30AF4FE53082605AEF81C2F /* Pods */ = { isa = PBXGroup; children = ( - 7ECE72AD43155832C505F13EE17792AC /* Expecta.modulemap */, - C0420BD68EF14CF918B80CF6BEFD7E11 /* Expecta.xcconfig */, - FD3A245D75F8D2D0FFAD5230F5925974 /* Expecta-dummy.m */, - 54371815367C40EDB52FBDB27B2DBA70 /* Expecta-prefix.pch */, - D6BE4E35D0AA9FEFC1DA27890CBA2A19 /* Expecta-umbrella.h */, - 9481427DF2902DFFCDC09936E3C52C6F /* Info.plist */, + EA37F5AFBB0F6348CDA957571E5C153C /* Expecta */, + 71ED81143BA7E918AC081A81B3307DAE /* Nocilla */, + 7945FFFFC4122DCC65EFCAA12AC60F1A /* Specta */, ); - name = "Support Files"; - path = "../Target Support Files/Expecta"; + name = Pods; sourceTree = ""; }; A3FE460D1DFDECE6F9DF7A9D70A295D7 /* Analytics */ = { @@ -710,25 +840,99 @@ path = Analytics; sourceTree = ""; }; - CE463C2540F7135F6A1E3F0D77FD4E0D /* Products */ = { + B3200B86C84628196CBF2170E3DFB4FF /* Support Files */ = { isa = PBXGroup; children = ( - B1E10A964BDF82FB9D8785DDE62B649E /* Analytics.framework */, - C64EEF0B124A45CFB5E4F8D885DD25B8 /* Expecta.framework */, - D2B17A0DCC328E3F87844037950BA12B /* Pods_Analytics_Example.framework */, - A415B73CA3799BA7B7F542210E94E91B /* Pods_Analytics_Tests.framework */, - 422EBF56CE7EDD00503D90B0231D3FC1 /* Specta.framework */, + 43B0911FDD9E7D706E882B01CBE753A2 /* Info.plist */, + E5B49F3A2C3775B24797B39C5EDB1D12 /* Specta.modulemap */, + B3A6B6A256E104C90FB0BA3C77916DAF /* Specta.xcconfig */, + 9A2B067495F18D88E6AAE62ED9A3A952 /* Specta-dummy.m */, + E9FBDE3A5453A6D3F1AC72AAF9DEFF36 /* Specta-prefix.pch */, + 400AC27B28C940AD4C7FED5171E00B73 /* Specta-umbrella.h */, ); - name = Products; + name = "Support Files"; + path = "../Target Support Files/Specta"; sourceTree = ""; }; - D24B2EA016AE4FABDB5AF17F3FD9C222 /* iOS */ = { + EA37F5AFBB0F6348CDA957571E5C153C /* Expecta */ = { isa = PBXGroup; children = ( - AAC405455F8E20BD0434D9D3E3D2879A /* Foundation.framework */, - B89BF7315BAB3516AF2A51041DC39C3B /* XCTest.framework */, + 07F6FEB6A8B5B3C02B1F7AC0B1416F42 /* EXPBlockDefinedMatcher.h */, + D170E667AE51D1E486429CF9EB14F8E2 /* EXPBlockDefinedMatcher.m */, + 1E09F4CDEE2C1AF48406C4B1D274F21A /* EXPDefines.h */, + 7E4C7BB766C918FEA55596360DD0B3BB /* EXPDoubleTuple.h */, + 180E448B9AF17FE7D45A0668988629FB /* EXPDoubleTuple.m */, + 7D31811A6DA375FFEB0CC414383588EA /* Expecta.h */, + DCF1F5F3DBA0F14ACBD55191FE7C28E6 /* ExpectaObject.h */, + A4480B33930A9075D36FFA16677F5113 /* ExpectaObject.m */, + EAA0B0D8410A748100182967B6BD8E5D /* ExpectaSupport.h */, + B640F7EF833538A7567F2876134FEC3C /* ExpectaSupport.m */, + 4CC2B2F237911FB7A48EA0A688CE9DFD /* EXPExpect.h */, + 8E9DB94FDFB0EDD4A7B005776522AD8F /* EXPExpect.m */, + 4A77024A1E8F3C2079DEEB9C333F7C62 /* EXPFloatTuple.h */, + 1DB4CCAC4A118DC45CB2F562BDE1E5AC /* EXPFloatTuple.m */, + FEEF1CCD4245A7A1DD5741CB920D2D0D /* EXPMatcher.h */, + 81BC3CC72028638F87B514D1A7853EEB /* EXPMatcherHelpers.h */, + DECB1E291A2275FD038BDF383541831A /* EXPMatcherHelpers.m */, + A92A84FCFC4ABCF6BE29001116807297 /* EXPMatchers.h */, + 19326B1AD9863BA4843E7602B723451C /* EXPMatchers+beCloseTo.h */, + 10FB2870274E6A883E945515401DCA07 /* EXPMatchers+beCloseTo.m */, + 6CA63BF80025A3D25CD928A36136F551 /* EXPMatchers+beFalsy.h */, + 7B15D02A719ABC18B697A175F171D199 /* EXPMatchers+beFalsy.m */, + 9DC968F5E8CEE0A8BDD77E1EB542F982 /* EXPMatchers+beginWith.h */, + E5FFF41A9A24C033FCC946202869A5C9 /* EXPMatchers+beginWith.m */, + 52269A5CEFF209E97F66A41DB2300E1C /* EXPMatchers+beGreaterThan.h */, + BD444BE7AACE3345E729ED0A7EE2E468 /* EXPMatchers+beGreaterThan.m */, + A32C700EBED12A89A370905134C69E44 /* EXPMatchers+beGreaterThanOrEqualTo.h */, + 52DDA6BC21D08377214BCAF012289DF5 /* EXPMatchers+beGreaterThanOrEqualTo.m */, + 65032861CC8655A9899472EF027123E7 /* EXPMatchers+beIdenticalTo.h */, + 54956A0063A54B236DD3CB15A478F607 /* EXPMatchers+beIdenticalTo.m */, + 323E13462D209A8AC526A27D9D767E45 /* EXPMatchers+beInstanceOf.h */, + C22F0A3F7D136F37CBC921C82913151E /* EXPMatchers+beInstanceOf.m */, + C65D93644F144030CDCAB432512075EB /* EXPMatchers+beInTheRangeOf.h */, + ADD0C2A882D7119AB07E313F15E6308B /* EXPMatchers+beInTheRangeOf.m */, + BCC2B009D60DA44006AF374F9AA779D5 /* EXPMatchers+beKindOf.h */, + 621F843A137B3E3899CF96CF46CF5A5A /* EXPMatchers+beKindOf.m */, + F4E609243D8AB1B2E70A8F2C5E9F7186 /* EXPMatchers+beLessThan.h */, + 90FBD137D0DEDCABC737FF2FDFBEFCBA /* EXPMatchers+beLessThan.m */, + 119280D2BDDC2135EAF4BB7B955E8FAB /* EXPMatchers+beLessThanOrEqualTo.h */, + 63AB1B8A34F9D4B45393CE44CE285382 /* EXPMatchers+beLessThanOrEqualTo.m */, + 7FC38653C71A4252F1FD159BB4D1EE4F /* EXPMatchers+beNil.h */, + C2DEF35243EE7B74E0BADE527AC8E6B0 /* EXPMatchers+beNil.m */, + E0DAE6457BDB82C50109C4667531F696 /* EXPMatchers+beSubclassOf.h */, + B6E1163F011E3D444A62D529DD550108 /* EXPMatchers+beSubclassOf.m */, + 8BA4D4B8C6E5AF50AB609E295A01DAE5 /* EXPMatchers+beSupersetOf.h */, + 35D5D72603A85EDED9BC68C849A71677 /* EXPMatchers+beSupersetOf.m */, + 32EC638BEB57AED9169DE0100EF22F2D /* EXPMatchers+beTruthy.h */, + 035E9D6E0275BCAFD58AF47623DB22DF /* EXPMatchers+beTruthy.m */, + 5D1397952079E341B332801205983771 /* EXPMatchers+conformTo.h */, + 9C86E1F5E7B8BE2BA68A3B6416E532D1 /* EXPMatchers+conformTo.m */, + 5B75167FE543EDAB22C03FFA2C43EB27 /* EXPMatchers+contain.h */, + 426DA9ED9B302E36BAC4BC16F6366C22 /* EXPMatchers+contain.m */, + DA87C31144BB044ECD47FB6C44ACB2CC /* EXPMatchers+endWith.h */, + 81D50D817643B34BE0A6793B8A38C131 /* EXPMatchers+endWith.m */, + 367CD2B562A7D4E32D8B08A63DA602ED /* EXPMatchers+equal.h */, + 83A007F3F3B0E1BA3EA6F01CF4311AA2 /* EXPMatchers+equal.m */, + 00F102F1E58C3474E3A809EE1E5B5655 /* EXPMatchers+haveCountOf.h */, + 1B1D2940D8C1436462D7D6D8912D3797 /* EXPMatchers+haveCountOf.m */, + 56F8D051211772210563049DD3A251E8 /* EXPMatchers+match.h */, + F8843B0B76B48BC52F8BE7AD151C48C7 /* EXPMatchers+match.m */, + 8E8EFD397EC324185FA95501C7A096F7 /* EXPMatchers+postNotification.h */, + AE5E4907A3648032A5E52DCB25AF70A2 /* EXPMatchers+postNotification.m */, + 129E0D30DA701F5E349DEA97F20661CA /* EXPMatchers+raise.h */, + 0E0684A9A2D760E042578EB213B228AB /* EXPMatchers+raise.m */, + 43D97130E4590D9EBE6FDAE4AFCA402B /* EXPMatchers+raiseWithReason.h */, + 8C4F938E8FE97C252FA207D0DD372B65 /* EXPMatchers+raiseWithReason.m */, + 48E6F388DB4C94996CFDB96CF560CBF8 /* EXPMatchers+respondTo.h */, + 43A15CD157816286E186F1211BE7202F /* EXPMatchers+respondTo.m */, + 756CD0982961FCE099DA103BA646FD59 /* EXPUnsupportedObject.h */, + 00407E6E2F0E736DD106AAD3EDD009C6 /* EXPUnsupportedObject.m */, + A4DE49C43591ED9234166839F5158A27 /* NSObject+Expecta.h */, + F0C23C26D420E80AD34DF7B0996B25E8 /* NSValue+Expecta.h */, + DC8C0425C03478A644814F28209B4B59 /* NSValue+Expecta.m */, + 38FA5E5388C2478DF05AE925F651E6C2 /* Support Files */, ); - name = iOS; + path = Expecta; sourceTree = ""; }; F15F4075F5E3AC70518F88DEF974D7EE /* Pods-Analytics_Example */ = { @@ -749,72 +953,74 @@ path = "Target Support Files/Pods-Analytics_Example"; sourceTree = ""; }; + F9E04FF06D5A3859C051A05DAACB955D /* Support Files */ = { + isa = PBXGroup; + children = ( + F7BCD1C92A55911C16FB9E6D60078BDE /* Info.plist */, + 15C91B211733F2117793BF2F2343BB56 /* Nocilla.modulemap */, + 8B1738538FDE483D368712F0D608FC3D /* Nocilla.xcconfig */, + 287BFBC3E9767165D9BCD7FD0BAD33D1 /* Nocilla-dummy.m */, + 2076CC034F6103DCF45A469B1E548E27 /* Nocilla-prefix.pch */, + 76010B681AA03D877FD5A52AF8E82C9D /* Nocilla-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/Nocilla"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 350AB2F3133E5526A7C1E1FCC349C4D0 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 205D2E281F68A223DBB09262E9514D41 /* Pods-Analytics_Example-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3BB8CDAF8D32C27C63297DF6A6151BE0 /* Headers */ = { + 2892402090ED2D6AF2641AD4B3C96F65 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 87BE4DBA7760C7E499C45A451F60FEE6 /* Analytics-umbrella.h in Headers */, - FA24925D3BF8FC9D7FFBB90E859B8683 /* NSData+GZIP.h in Headers */, - A7C8870351721739784DAD6F9E5E443F /* SEGAliasPayload.h in Headers */, - 42B6B3A4B277D7AEEA103D37BCB8BAB3 /* SEGAnalytics.h in Headers */, - DF805AA19BFFE2C8DCC830AEDF31AECE /* SEGAnalyticsRequest.h in Headers */, - 8C863DAD4DCD58BABD441F87BC34D437 /* SEGAnalyticsUtils.h in Headers */, - 7B222B1CECE7CE3C44A6A10B121100E8 /* SEGBluetooth.h in Headers */, - F4E3EA3FFF750623C0D3D4D3559FC09C /* SEGGroupPayload.h in Headers */, - 8DDC7B7A80772A05340D70220AE58160 /* SEGIdentifyPayload.h in Headers */, - C607F4E62E5BF4A9FBD56A71211FC75A /* SEGIntegration.h in Headers */, - B25F217AF652B8C0792E3E94B274D4C6 /* SEGIntegrationFactory.h in Headers */, - E93ACA020A2DE080521CBFD788093CAA /* SEGLocation.h in Headers */, - E669B5F2FE53951046FED0C26248D071 /* SEGPayload.h in Headers */, - 5B809E0476B1ABE6733964E952E8BC74 /* SEGReachability.h in Headers */, - 595FC1CF9EC3D417BB6CE1564B2B04B1 /* SEGScreenPayload.h in Headers */, - F37910D0A6D3DC1B0E7F7618B055FCBF /* SEGSegmentIntegration.h in Headers */, - 62F985F89E0DF60B306DFD34FD661EFD /* SEGSegmentIntegrationFactory.h in Headers */, - 5B1FC5269751A6F7DE56B57668258542 /* SEGStoreKitTracker.h in Headers */, - 2F733901343F8E948A2C140EFA3C3898 /* SEGTrackPayload.h in Headers */, - C6A59D1DC1DD9BA746D7B5B69E40341B /* UIViewController+SEGScreen.h in Headers */, + 52695B80D42DFB4C48D7A906478509EB /* ASIHTTPRequestStub.h in Headers */, + 128B9A07E9D0F95B28E5F1F3483CB7EA /* LSASIHTTPRequestAdapter.h in Headers */, + 27832B2605A37241AF9CD554C9ECB6D0 /* LSASIHTTPRequestHook.h in Headers */, + 3B4F15B3D4EBB8580874CFA87CAAB437 /* LSDataMatcher.h in Headers */, + 746762DD022722AA0783532E872ACCC0 /* LSHTTPBody.h in Headers */, + D2B3B8A5532F9F084D2855970798CB82 /* LSHTTPClientHook.h in Headers */, + 3B588A1AD8E3D88B70EF1A8D3CF519ED /* LSHTTPRequest.h in Headers */, + A434C8CB0F23A35DA222105C7B11300D /* LSHTTPRequestDiff.h in Headers */, + A460983620B3719092C5217CCC57A699 /* LSHTTPRequestDSLRepresentation.h in Headers */, + B7B6C386D18C61D236CE7B92C62DC4F4 /* LSHTTPResponse.h in Headers */, + 15A7217C749314E8423F3C36A99BAF7A /* LSHTTPStubURLProtocol.h in Headers */, + CA303CF6D30D41F05C81DF35576B6C34 /* LSMatcheable.h in Headers */, + 4064CF661F3AD87993F7BFD4AD26C45D /* LSMatcher.h in Headers */, + 2070701995190A07047F664492D7F156 /* LSNocilla.h in Headers */, + C4F4C8EF4A764C0FDEB5789F9207FFF2 /* LSNSURLHook.h in Headers */, + 0D96C808906230C689C8310AC8E7DF5B /* LSNSURLSessionHook.h in Headers */, + 4B0FACF86699832CB060706698EEDA62 /* LSRegexMatcher.h in Headers */, + 683D42CCDBA04DEAA5927130555865FB /* LSStringMatcher.h in Headers */, + DE94765732B7FBCD78E56173F4A782ED /* LSStubRequest.h in Headers */, + 6F9AC619478339681794CFB2FFF49EA3 /* LSStubRequestDSL.h in Headers */, + 781A3371065498563238D5E4E7F7BC49 /* LSStubResponse.h in Headers */, + B7BAA1610C192270DE28D6F9ACE95542 /* LSStubResponseDSL.h in Headers */, + 6AAD3EF28C1C2DA026B93AD8D814F64D /* Nocilla-umbrella.h in Headers */, + B0BD13A01F667B129F4F5F167088A024 /* Nocilla.h in Headers */, + 98448E68F706C3077F402B1F1B64520E /* NSData+Matcheable.h in Headers */, + 3C380C634D63206648B6D947901FF88D /* NSData+Nocilla.h in Headers */, + E07A45CD453CFC98DE69AA370E5780F9 /* NSRegularExpression+Matcheable.h in Headers */, + FCFC2208684969E5BDF9F439AEE58162 /* NSString+Matcheable.h in Headers */, + B30D380B5EFCD54FEE04D3C4F1988262 /* NSString+Nocilla.h in Headers */, + 8927C37DD5750B9F6409C3EA80623A16 /* NSURLRequest+DSL.h in Headers */, + 2DBDF5B701DC699F0E5A0ADCFF7F3E94 /* NSURLRequest+LSHTTPRequest.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5416C4C592E72EC7C1B7974661162ED5 /* Headers */ = { + 350AB2F3133E5526A7C1E1FCC349C4D0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 246D2F361A885D4A65992B44672B8F71 /* Specta-umbrella.h in Headers */, - C9A37BFA71A015B3CC2A41A4C04854AF /* Specta.h in Headers */, - 2CA1AD3A7559BEDC1B5E5C1D210D7C06 /* SpectaDSL.h in Headers */, - 6FEB4F29647C348A7F92532D03A5447A /* SpectaTypes.h in Headers */, - 352F0F489C91C8E428D9B38A7B265341 /* SpectaUtility.h in Headers */, - 3C30F1B5891B36BF5EE5EEDF1479CF75 /* SPTCallSite.h in Headers */, - F13ACBC3636BB0F63C764503DD088AA2 /* SPTCompiledExample.h in Headers */, - DF466EB0F1C7BEB2406FB308ECF5DCD0 /* SPTExample.h in Headers */, - AA620A8B57D6B90FB028CB32D2666AED /* SPTExampleGroup.h in Headers */, - 90491F90B4D48E6E2E8BFC983D4DBA6B /* SPTExcludeGlobalBeforeAfterEach.h in Headers */, - 7E80CDD6FF963AF4D0A43C8A0D9F9951 /* SPTGlobalBeforeAfterEach.h in Headers */, - DB64AB3B4ADCFF24785396CE010055D9 /* SPTSharedExampleGroups.h in Headers */, - DF771CDD2317E6867374A46307096018 /* SPTSpec.h in Headers */, - D6859D582E74062B12173D16E8468951 /* SPTTestSuite.h in Headers */, - ED5BD0E3736D52FE7CF6915B724E743E /* XCTest+Private.h in Headers */, - BBA91DAB31D55D672D162FCB1BA15A9F /* XCTestCase+Specta.h in Headers */, + 205D2E281F68A223DBB09262E9514D41 /* Pods-Analytics_Example-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 859F1F23A2B86F29D0B0338744730F21 /* Headers */ = { + 49D6AD27A271D836CD29B7C2023D8E11 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - CF63FD2D8FD4C6A2A67F191D3FB34385 /* Pods-Analytics_Tests-umbrella.h in Headers */, + 2D650B8931887E7AEAF614ED80FC8DE0 /* Pods-Analytics_Tests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -865,6 +1071,56 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A869C0311BAD1A4771CBB4C4109DB47F /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B479AE437D9B71C51CB95895BCCA7373 /* Specta-umbrella.h in Headers */, + 01304C20BC2C7E959D452DF9D0FAD0B6 /* Specta.h in Headers */, + 4C33130DFD75412F3E280502FBAA0945 /* SpectaDSL.h in Headers */, + BC5155194259A004C9DD605674B023A9 /* SpectaTypes.h in Headers */, + AFFF59A6580376AFB69A1B0877FEAE98 /* SpectaUtility.h in Headers */, + F3B1762AAD01333FFBF43A716D325A59 /* SPTCallSite.h in Headers */, + 94EB8FF688C1E8F952B8C167F3F2B0B4 /* SPTCompiledExample.h in Headers */, + 72D1D73620A94FA53E1B32472F3E00C2 /* SPTExample.h in Headers */, + A10DD31CE801172ADE6CADAFC3BEF9CE /* SPTExampleGroup.h in Headers */, + 5879A13A87CC9D9BEDE5351704BDA541 /* SPTExcludeGlobalBeforeAfterEach.h in Headers */, + D8D1615374BCBF30AC4B2572E4EA0DE0 /* SPTGlobalBeforeAfterEach.h in Headers */, + 63402D899FE759DBD6505CFF19BFD7E3 /* SPTSharedExampleGroups.h in Headers */, + 68648F40FB98A5F4EF4AD187473D1F3D /* SPTSpec.h in Headers */, + 3A82F4E68E8D3FF7D414E6073346C049 /* SPTTestSuite.h in Headers */, + 1D70460708A86CB706BFAD0E12C41EE2 /* XCTest+Private.h in Headers */, + 386B6C6533361BFE379152A810606851 /* XCTestCase+Specta.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B0C81D4D0D3192EA28F8D355C447D1C3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CA40E122B8FECDC1F1A2C37AF14EBA8A /* Analytics-umbrella.h in Headers */, + 79ED2E8199BF13D92950ED89A654B13A /* NSData+GZIP.h in Headers */, + 4BB2FB639E6537B6991B248520ABDD94 /* SEGAliasPayload.h in Headers */, + 4EF43BE713E7E9C7FD0E7AF28532E6D9 /* SEGAnalytics.h in Headers */, + 00CBED9954E20CEAFAB62EBC2C6D1AC2 /* SEGAnalyticsUtils.h in Headers */, + 6F4BD4857B80D7977A32B05ABFDFC79E /* SEGBluetooth.h in Headers */, + B4B9E8A3759D576D35EFEE37A776B6DA /* SEGGroupPayload.h in Headers */, + 556445BCF5C80A0C0E29BAA555C6047A /* SEGHTTPClient.h in Headers */, + DAACBD590DEC0537819A015982A9F0FF /* SEGIdentifyPayload.h in Headers */, + 47E70B3C1FB83EA2A617E5CEA02735B9 /* SEGIntegration.h in Headers */, + C5F3EBC41706031D0941D1D0195A8D39 /* SEGIntegrationFactory.h in Headers */, + 03B1EC3A856CCA8E9363490D1EC67402 /* SEGLocation.h in Headers */, + D9600C057A14F3C9F461FB93E0019955 /* SEGPayload.h in Headers */, + 37BE7CC360317F2CBDFBAEFCE7B39E30 /* SEGReachability.h in Headers */, + 70F84A543FB8DC8063A9630331204B44 /* SEGScreenPayload.h in Headers */, + C2E3AD915C090FFF5AE1DD3586F3BD31 /* SEGSegmentIntegration.h in Headers */, + 6EF70D5FEA5E240C75CF1A94F09A22BD /* SEGSegmentIntegrationFactory.h in Headers */, + 6895E8584D9E5DD9FD807FA66594B619 /* SEGStoreKitTracker.h in Headers */, + 017FA696C155C9139B23611A54C315A9 /* SEGTrackPayload.h in Headers */, + 8A38391C03BADD1855970B67897C4BCD /* UIViewController+SEGScreen.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -882,51 +1138,51 @@ ); name = Expecta; productName = Expecta; - productReference = C64EEF0B124A45CFB5E4F8D885DD25B8 /* Expecta.framework */; + productReference = A13FC9A2076E24814E723DDDDA085E98 /* Expecta.framework */; productType = "com.apple.product-type.framework"; }; - 0FD30761B1CF7847B4A3F5F0BC3060A7 /* Specta */ = { + 13823FF75E73B2DC15B00D58684E9EA8 /* Pods-Analytics_Example */ = { isa = PBXNativeTarget; - buildConfigurationList = DC4E3E7A834CE6E3FE56CDC3F99E1782 /* Build configuration list for PBXNativeTarget "Specta" */; + buildConfigurationList = AAA74E263C0DB0C37BDD0F826800BC2A /* Build configuration list for PBXNativeTarget "Pods-Analytics_Example" */; buildPhases = ( - F86075CEFBBDF70EB16163DF8A0A33A7 /* Sources */, - 5544961483502190CD0CF4B999B8D8D3 /* Frameworks */, - 5416C4C592E72EC7C1B7974661162ED5 /* Headers */, + 0B4256CD2972D7BA078D1A8CEA06ECA1 /* Sources */, + EA0D9B35A024875029597B60A5AFD7D6 /* Frameworks */, + 350AB2F3133E5526A7C1E1FCC349C4D0 /* Headers */, ); buildRules = ( ); dependencies = ( + 6863AA452B9D37159D82D644711452C0 /* PBXTargetDependency */, ); - name = Specta; - productName = Specta; - productReference = 422EBF56CE7EDD00503D90B0231D3FC1 /* Specta.framework */; + name = "Pods-Analytics_Example"; + productName = "Pods-Analytics_Example"; + productReference = 4B8950BFD3FA25B2C9EB3A08FF93CE3E /* Pods_Analytics_Example.framework */; productType = "com.apple.product-type.framework"; }; - 13823FF75E73B2DC15B00D58684E9EA8 /* Pods-Analytics_Example */ = { + 393E0E1A41299C44C63DBB766A243010 /* Nocilla */ = { isa = PBXNativeTarget; - buildConfigurationList = AAA74E263C0DB0C37BDD0F826800BC2A /* Build configuration list for PBXNativeTarget "Pods-Analytics_Example" */; + buildConfigurationList = CFC1B17C6D2D8BA2E80A422D19324095 /* Build configuration list for PBXNativeTarget "Nocilla" */; buildPhases = ( - 0B4256CD2972D7BA078D1A8CEA06ECA1 /* Sources */, - EA0D9B35A024875029597B60A5AFD7D6 /* Frameworks */, - 350AB2F3133E5526A7C1E1FCC349C4D0 /* Headers */, + 5111908BA704400FC15A80EF8AFD7E0F /* Sources */, + 5F40817F9BD61376555E224A54C77911 /* Frameworks */, + 2892402090ED2D6AF2641AD4B3C96F65 /* Headers */, ); buildRules = ( ); dependencies = ( - 6863AA452B9D37159D82D644711452C0 /* PBXTargetDependency */, ); - name = "Pods-Analytics_Example"; - productName = "Pods-Analytics_Example"; - productReference = D2B17A0DCC328E3F87844037950BA12B /* Pods_Analytics_Example.framework */; + name = Nocilla; + productName = Nocilla; + productReference = 849F819B79FB3963BEA06E1DA0311A0E /* Nocilla.framework */; productType = "com.apple.product-type.framework"; }; 481403DCFE420996D2A734931FA92D7F /* Analytics */ = { isa = PBXNativeTarget; buildConfigurationList = 831D24DD24BCA8DDFDF1F7716DFC19EA /* Build configuration list for PBXNativeTarget "Analytics" */; buildPhases = ( - F9633956A90E69F091C649A864A860FC /* Sources */, + 3F3FBB0098486D5590D4A98769B5F2A9 /* Sources */, B6094D4FDD15EED485201D6DE465AFF5 /* Frameworks */, - 3BB8CDAF8D32C27C63297DF6A6151BE0 /* Headers */, + B0C81D4D0D3192EA28F8D355C447D1C3 /* Headers */, ); buildRules = ( ); @@ -934,26 +1190,44 @@ ); name = Analytics; productName = Analytics; - productReference = B1E10A964BDF82FB9D8785DDE62B649E /* Analytics.framework */; + productReference = DE5E8458E16DE72BEC69B0D4B01C6153 /* Analytics.framework */; + productType = "com.apple.product-type.framework"; + }; + 9D2DFA866E52BD6EF797813C646A8B61 /* Specta */ = { + isa = PBXNativeTarget; + buildConfigurationList = FCC0E86E1005B36DF47BE75188CE88E2 /* Build configuration list for PBXNativeTarget "Specta" */; + buildPhases = ( + 011544CB4288ADBECAD8C31597B0EDF3 /* Sources */, + 5411DB9B18977D922142BB1F6696F0FF /* Frameworks */, + A869C0311BAD1A4771CBB4C4109DB47F /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Specta; + productName = Specta; + productReference = 0A10D5AEA0D81AFFED07D5B506817936 /* Specta.framework */; productType = "com.apple.product-type.framework"; }; - F380DAFF9305B270F6DEAD570C7D654D /* Pods-Analytics_Tests */ = { + A3CE01F8D28CC8D9466EFB33EA2B5A7C /* Pods-Analytics_Tests */ = { isa = PBXNativeTarget; - buildConfigurationList = 78AA09DDB0DFDA80313EE6BAA735433C /* Build configuration list for PBXNativeTarget "Pods-Analytics_Tests" */; + buildConfigurationList = A574B874F8D65DB91F6033CCFA5D3C6C /* Build configuration list for PBXNativeTarget "Pods-Analytics_Tests" */; buildPhases = ( - 2C580466772AE42615594F0D76C57127 /* Sources */, - C2793424E2A34C45E85B21D0E7487F2A /* Frameworks */, - 859F1F23A2B86F29D0B0338744730F21 /* Headers */, + 223BC6C4CCDB4AC9B73811B63839593D /* Sources */, + 295390A1C2CFD9AC4C9337AB4E32FD5A /* Frameworks */, + 49D6AD27A271D836CD29B7C2023D8E11 /* Headers */, ); buildRules = ( ); dependencies = ( - 5DD4B06DA6BB3A2A34B2E9F34A5F6F32 /* PBXTargetDependency */, - 86E6F6484AC7DCABE7AE48A63F282397 /* PBXTargetDependency */, + 81E0BDD9C9AC4C6BAB42C9BF6A762A94 /* PBXTargetDependency */, + 952E0011FA05DC4984128DAABDCD00F7 /* PBXTargetDependency */, + D4D73CB32779359270A419C1D08A7066 /* PBXTargetDependency */, ); name = "Pods-Analytics_Tests"; productName = "Pods-Analytics_Tests"; - productReference = A415B73CA3799BA7B7F542210E94E91B /* Pods_Analytics_Tests.framework */; + productReference = 3291A964D3603A2B35E61C43E1D54DA2 /* Pods_Analytics_Tests.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -973,20 +1247,39 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = CE463C2540F7135F6A1E3F0D77FD4E0D /* Products */; + productRefGroup = 748E7CDBA176523AE9C02F0D1EE0702E /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 481403DCFE420996D2A734931FA92D7F /* Analytics */, 0D888F29E05E498D0CD91A51D28599A5 /* Expecta */, + 393E0E1A41299C44C63DBB766A243010 /* Nocilla */, 13823FF75E73B2DC15B00D58684E9EA8 /* Pods-Analytics_Example */, - F380DAFF9305B270F6DEAD570C7D654D /* Pods-Analytics_Tests */, - 0FD30761B1CF7847B4A3F5F0BC3060A7 /* Specta */, + A3CE01F8D28CC8D9466EFB33EA2B5A7C /* Pods-Analytics_Tests */, + 9D2DFA866E52BD6EF797813C646A8B61 /* Specta */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ + 011544CB4288ADBECAD8C31597B0EDF3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8F8D4BABD6C928CFEE32CDA5CC97188A /* Specta-dummy.m in Sources */, + BDE2564FBEF154A959111B0B91A34ED4 /* SpectaDSL.m in Sources */, + 95F0E3816CCB73CCF8BFAC82C1EDE91B /* SpectaUtility.m in Sources */, + F3BB4311FA83CDDD5031A97F03A9E68A /* SPTCallSite.m in Sources */, + A968114B5888EE6CF93F30331B51FF89 /* SPTCompiledExample.m in Sources */, + 41953DAA65006204A4869C536A6B0F2A /* SPTExample.m in Sources */, + 05FC69F940FABFD8407DB2C7C300EEE4 /* SPTExampleGroup.m in Sources */, + 7AFCEE99C2A708CAA64C621B4E280087 /* SPTSharedExampleGroups.m in Sources */, + A7321D75FDD5D9685F18845E84A206F4 /* SPTSpec.m in Sources */, + 52E493AC179B1F738F42276D7B57E16B /* SPTTestSuite.m in Sources */, + 27FEF9B885DDC6AF516D3816141BF58B /* XCTestCase+Specta.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 0B4256CD2972D7BA078D1A8CEA06ECA1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -995,11 +1288,69 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2C580466772AE42615594F0D76C57127 /* Sources */ = { + 223BC6C4CCDB4AC9B73811B63839593D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF3CB6A6F9B86A8723208C7A2418BB10 /* Pods-Analytics_Tests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3F3FBB0098486D5590D4A98769B5F2A9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8B7BE1676BE19245D2C809BE00F239BA /* Analytics-dummy.m in Sources */, + CDBB6AA64E2CFC2B0B0FB102EBED8127 /* NSData+GZIP.m in Sources */, + 835E821118B7E113219A4FA9637A2876 /* SEGAliasPayload.m in Sources */, + 9E7987C4C41E5C7A8D930B2847A3EF20 /* SEGAnalytics.m in Sources */, + B057CD393503769DBB7FCD6AE4173B66 /* SEGAnalyticsUtils.m in Sources */, + ABF3ECA6CC0D0DB55A283D11FE3F1771 /* SEGBluetooth.m in Sources */, + F0BAD7AF329A8213BAC2E1847FCEA088 /* SEGGroupPayload.m in Sources */, + 100973774AE7C50C13731F5A56EDB0A7 /* SEGHTTPClient.m in Sources */, + 3D760AE20F5B60809247E6328D534A80 /* SEGIdentifyPayload.m in Sources */, + 750E8E7A6E8885E3CAE1F8F7B9B57ADC /* SEGLocation.m in Sources */, + 3E5413E2683109B752875EFE723D2227 /* SEGPayload.m in Sources */, + 7CC8165077CEBED403D0B9996DDCE1E3 /* SEGReachability.m in Sources */, + D9B3D869B64684870A15D16EC496F3A3 /* SEGScreenPayload.m in Sources */, + 937BB86FD6EABBB863B68A0C98160CEE /* SEGSegmentIntegration.m in Sources */, + BA2D2E8C8CCC6DB1CBE95D6C171C3100 /* SEGSegmentIntegrationFactory.m in Sources */, + E87B2BDF61A795AF764D9ACDECB8CDD0 /* SEGStoreKitTracker.m in Sources */, + 3ECFA819FFF561E456D215EB6F2C7A5C /* SEGTrackPayload.m in Sources */, + E4E1E323F67925451C594641D27EAAAB /* UIViewController+SEGScreen.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5111908BA704400FC15A80EF8AFD7E0F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9AD8B3849C1D4220E3EE375F49FC1CB9 /* Pods-Analytics_Tests-dummy.m in Sources */, + F1B92A4CC0ACE18D6B0B0A2153C13D08 /* ASIHTTPRequestStub.m in Sources */, + 861BC8874F6CC678B0C994082425BB2C /* LSASIHTTPRequestAdapter.m in Sources */, + 8929941F0C7A48971332804FD69CC3CA /* LSASIHTTPRequestHook.m in Sources */, + 43271DD951A1049D87FF064A1FD87175 /* LSDataMatcher.m in Sources */, + FCB4158D0A7BB2032A5D13F0D3758642 /* LSHTTPClientHook.m in Sources */, + 4DEA938F1EACED5EFF9D45FD037D3BB2 /* LSHTTPRequestDiff.m in Sources */, + C79A1CD129A1579A7749F570CB4D3962 /* LSHTTPRequestDSLRepresentation.m in Sources */, + 436A0A20916A6DC135B2A053C44CA331 /* LSHTTPStubURLProtocol.m in Sources */, + DB5E7396AB1F4CA51F6B02A52E3BCA8A /* LSMatcher.m in Sources */, + 60E906CDC30F4C0523F21C90F9491A14 /* LSNocilla.m in Sources */, + 49727DC45DB1C0FD0D754C89A0B39F7E /* LSNSURLHook.m in Sources */, + 3EDF6A877923CA3D380A27BA221A3693 /* LSNSURLSessionHook.m in Sources */, + 16325200AF77954D55A5F9F56A6433F5 /* LSRegexMatcher.m in Sources */, + D89A3918634DBBD74E3642EDEFF76A71 /* LSStringMatcher.m in Sources */, + 7378D773448D44130FB2CF4847619B8D /* LSStubRequest.m in Sources */, + 08D3436DDB71F2C2250BBDFBE80B2D23 /* LSStubRequestDSL.m in Sources */, + DDA4DCAE58682D1F923541927EDD2275 /* LSStubResponse.m in Sources */, + D4E2C5E311068E1AA79643974090A086 /* LSStubResponseDSL.m in Sources */, + 24B569099A40F837596002531AEBBE6C /* Nocilla-dummy.m in Sources */, + A5C90576850BC920FB28CA13242AED17 /* NSData+Matcheable.m in Sources */, + 57F39C3A350D0C79515078277A4A30F2 /* NSData+Nocilla.m in Sources */, + 1277359C8D8BB837B24617969BAAC9DF /* NSRegularExpression+Matcheable.m in Sources */, + C6B1AECA74F601617F8329EB45FB0265 /* NSString+Matcheable.m in Sources */, + 5BE554338DE6FB62A2C1E198797C3C79 /* NSString+Nocilla.m in Sources */, + 49CBA94E894CB4CF83C7A8EE9711249F /* NSURLRequest+DSL.m in Sources */, + 65E2F7AD000FC4031DE3B3D9C4DD0461 /* NSURLRequest+LSHTTPRequest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1045,69 +1396,32 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F86075CEFBBDF70EB16163DF8A0A33A7 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F6BBC41C120C0A9EA21B11E42DDF0B83 /* Specta-dummy.m in Sources */, - 5361FFBBC190D31CCF03DC91093A8064 /* SpectaDSL.m in Sources */, - EE27B2FD7FC797D56E25B1006AD82C3D /* SpectaUtility.m in Sources */, - D8A8412776101EE9AEE35EDBE5B153C9 /* SPTCallSite.m in Sources */, - 20FD0EB3085EB24A46CA01643A455A58 /* SPTCompiledExample.m in Sources */, - 765F6187B18A76EABF04B454E990C910 /* SPTExample.m in Sources */, - 3EB892FEFED02B2B9A7D8A6ED7442B5A /* SPTExampleGroup.m in Sources */, - C457E584C0D03D3C74FAE0BE6B4BBC8F /* SPTSharedExampleGroups.m in Sources */, - B192D6173D37C3ACDCE76E8D2814B296 /* SPTSpec.m in Sources */, - 5137B3CF5E11FE408C2E2805BC216AE0 /* SPTTestSuite.m in Sources */, - 592ACEA76515938507B7DCE4D6597A1F /* XCTestCase+Specta.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F9633956A90E69F091C649A864A860FC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D1C9DD674B92541CAEE0339E436AC55F /* Analytics-dummy.m in Sources */, - 87AAFB58F287E16F46FE4FDB84B342BC /* NSData+GZIP.m in Sources */, - D3EA08FEF9B0D811494A6EE00EEF090C /* SEGAliasPayload.m in Sources */, - 6A1BB5F0BE686B3085C53E653CAB9373 /* SEGAnalytics.m in Sources */, - D5AE2AB949F9A3B1BD29FBCF9D35FA3F /* SEGAnalyticsRequest.m in Sources */, - 3B4A74B27C8CC228A90A3E3293E5EFCB /* SEGAnalyticsUtils.m in Sources */, - ACE47CBC0ABCF3A5A51BA0984A32788E /* SEGBluetooth.m in Sources */, - 5B956D6A8DB5A9479FCCC04741602BEF /* SEGGroupPayload.m in Sources */, - 8717FA98BAD347950B617AF5D881624C /* SEGIdentifyPayload.m in Sources */, - 8F2F51C2FC6CEB5E34AAA7FC4EA7BA08 /* SEGLocation.m in Sources */, - A1B576DA80DC7DE7AEF75BB35F260B64 /* SEGPayload.m in Sources */, - B71CB31C8F37CC676C7622CACF23925A /* SEGReachability.m in Sources */, - 842611E25618260A2EC7DB1C7D96A8AB /* SEGScreenPayload.m in Sources */, - F4B3731EE4FD423B164E8F90E8E8B7D3 /* SEGSegmentIntegration.m in Sources */, - D1206E5CE692572EC607629308808C2E /* SEGSegmentIntegrationFactory.m in Sources */, - 3630F674338226E1F70B2B375C84374C /* SEGStoreKitTracker.m in Sources */, - 75A69577B213C9C4B99C73CD4948BAC6 /* SEGTrackPayload.m in Sources */, - 1AFCE591ADF942CC1D7201001DDA166C /* UIViewController+SEGScreen.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 5DD4B06DA6BB3A2A34B2E9F34A5F6F32 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Expecta; - target = 0D888F29E05E498D0CD91A51D28599A5 /* Expecta */; - targetProxy = C144EEE342D71EA1D4775D7CAB4654C0 /* PBXContainerItemProxy */; - }; 6863AA452B9D37159D82D644711452C0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Analytics; target = 481403DCFE420996D2A734931FA92D7F /* Analytics */; targetProxy = 5B0BB086024D62CF5629FE2FAFA19576 /* PBXContainerItemProxy */; }; - 86E6F6484AC7DCABE7AE48A63F282397 /* PBXTargetDependency */ = { + 81E0BDD9C9AC4C6BAB42C9BF6A762A94 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Expecta; + target = 0D888F29E05E498D0CD91A51D28599A5 /* Expecta */; + targetProxy = 4AD3159493E139AFFA995C125A1880D9 /* PBXContainerItemProxy */; + }; + 952E0011FA05DC4984128DAABDCD00F7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Nocilla; + target = 393E0E1A41299C44C63DBB766A243010 /* Nocilla */; + targetProxy = 1BB30AB7E00A4E29A1A57BB824C19B5D /* PBXContainerItemProxy */; + }; + D4D73CB32779359270A419C1D08A7066 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Specta; - target = 0FD30761B1CF7847B4A3F5F0BC3060A7 /* Specta */; - targetProxy = 90C2D9A56026173503C37A4DDCDF6E4C /* PBXContainerItemProxy */; + target = 9D2DFA866E52BD6EF797813C646A8B61 /* Specta */; + targetProxy = E0F3DF15C53DA09D53FBAFBAF65C493E /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -1150,42 +1464,42 @@ }; name = Release; }; - 16A64F14743B7A0EC27E5B47D6E08B41 /* Release */ = { + 172B384E80FE3B1EBC3F5DE5188A1838 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A24D3400203E04D137441022262A66C2 /* Specta.xcconfig */; + baseConfigurationReference = 85200ECAD4EA459EB0598420E91F81BE /* Analytics.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Specta/Specta-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Specta/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Analytics/Analytics-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Analytics/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Specta/Specta.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Specta; + MODULEMAP_FILE = "Target Support Files/Analytics/Analytics.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = Analytics; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 172B384E80FE3B1EBC3F5DE5188A1838 /* Debug */ = { + 3D33A2637D68077BFD48953B71CD11DF /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 85200ECAD4EA459EB0598420E91F81BE /* Analytics.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -1198,7 +1512,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/Analytics/Analytics.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; + MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = Analytics; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -1206,36 +1520,36 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 3D33A2637D68077BFD48953B71CD11DF /* Release */ = { + 46492DBC1FF4FD2A326D70ADAECEF604 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 85200ECAD4EA459EB0598420E91F81BE /* Analytics.xcconfig */; + baseConfigurationReference = B3A6B6A256E104C90FB0BA3C77916DAF /* Specta.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Analytics/Analytics-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Analytics/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Specta/Specta-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Specta/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Analytics/Analytics.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Analytics; + MODULEMAP_FILE = "Target Support Files/Specta/Specta.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = Specta; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; 4EB7F10368FDC919E6752B1E00F08369 /* Debug */ = { isa = XCBuildConfiguration; @@ -1303,9 +1617,42 @@ }; name = Release; }; + 7F3F62593F97F90E739AA359B1DF0815 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 725FD454003799E3C5F6FE998212E0D5 /* Pods-Analytics_Tests.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Analytics_Tests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Analytics_Tests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 86B3AF85DF2958967D7E96849C2BE84C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C0420BD68EF14CF918B80CF6BEFD7E11 /* Expecta.xcconfig */; + baseConfigurationReference = FF07B106FDF73E8D4F03156F20D105A1 /* Expecta.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -1332,6 +1679,68 @@ }; name = Debug; }; + 971DD04F43B92A1B94DB0EDDDF0163E7 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B3A6B6A256E104C90FB0BA3C77916DAF /* Specta.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/Specta/Specta-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Specta/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Specta/Specta.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Specta; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 99017DF5D51E06693E739A41925BC284 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6A5952869E40BF6D9CCDFAA59BB837CD /* Pods-Analytics_Tests.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Analytics_Tests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Analytics_Tests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; D3E3D092A3FF7311A98E44BBA36FFD12 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1374,42 +1783,9 @@ }; name = Debug; }; - F209600A028C47A03892CBFD440897F5 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6A5952869E40BF6D9CCDFAA59BB837CD /* Pods-Analytics_Tests.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Analytics_Tests/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Analytics_Tests; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - F24F328AA1CFC9A061F629C917D03F44 /* Release */ = { + D7FDD52E5B79A418162D75F787ED258E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C0420BD68EF14CF918B80CF6BEFD7E11 /* Expecta.xcconfig */; + baseConfigurationReference = 8B1738538FDE483D368712F0D608FC3D /* Nocilla.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -1420,14 +1796,14 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Expecta/Expecta-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Expecta/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Nocilla/Nocilla-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Nocilla/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Expecta/Expecta.modulemap"; + MODULEMAP_FILE = "Target Support Files/Nocilla/Nocilla.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Expecta; + PRODUCT_NAME = Nocilla; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1436,9 +1812,9 @@ }; name = Release; }; - F9468EAB0C1720BDEA309CD7BF01EF05 /* Debug */ = { + E09F9FDADF04D3E7A36776069400600B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A24D3400203E04D137441022262A66C2 /* Specta.xcconfig */; + baseConfigurationReference = 8B1738538FDE483D368712F0D608FC3D /* Nocilla.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -1449,14 +1825,14 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Specta/Specta-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Specta/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Nocilla/Nocilla-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Nocilla/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Specta/Specta.modulemap"; + MODULEMAP_FILE = "Target Support Files/Nocilla/Nocilla.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Specta; + PRODUCT_NAME = Nocilla; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1465,38 +1841,34 @@ }; name = Debug; }; - FE64755F8B79489DE4CE68C799ECA598 /* Debug */ = { + F24F328AA1CFC9A061F629C917D03F44 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 725FD454003799E3C5F6FE998212E0D5 /* Pods-Analytics_Tests.debug.xcconfig */; + baseConfigurationReference = FF07B106FDF73E8D4F03156F20D105A1 /* Expecta.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Analytics_Tests/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Expecta/Expecta-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Expecta/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Analytics_Tests; + MODULEMAP_FILE = "Target Support Files/Expecta/Expecta.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Expecta; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; /* End XCBuildConfiguration section */ @@ -1510,20 +1882,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 78AA09DDB0DFDA80313EE6BAA735433C /* Build configuration list for PBXNativeTarget "Pods-Analytics_Tests" */ = { + 831D24DD24BCA8DDFDF1F7716DFC19EA /* Build configuration list for PBXNativeTarget "Analytics" */ = { isa = XCConfigurationList; buildConfigurations = ( - FE64755F8B79489DE4CE68C799ECA598 /* Debug */, - F209600A028C47A03892CBFD440897F5 /* Release */, + 172B384E80FE3B1EBC3F5DE5188A1838 /* Debug */, + 3D33A2637D68077BFD48953B71CD11DF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 831D24DD24BCA8DDFDF1F7716DFC19EA /* Build configuration list for PBXNativeTarget "Analytics" */ = { + A574B874F8D65DB91F6033CCFA5D3C6C /* Build configuration list for PBXNativeTarget "Pods-Analytics_Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 172B384E80FE3B1EBC3F5DE5188A1838 /* Debug */, - 3D33A2637D68077BFD48953B71CD11DF /* Release */, + 7F3F62593F97F90E739AA359B1DF0815 /* Debug */, + 99017DF5D51E06693E739A41925BC284 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1537,11 +1909,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DC4E3E7A834CE6E3FE56CDC3F99E1782 /* Build configuration list for PBXNativeTarget "Specta" */ = { + CFC1B17C6D2D8BA2E80A422D19324095 /* Build configuration list for PBXNativeTarget "Nocilla" */ = { isa = XCConfigurationList; buildConfigurations = ( - F9468EAB0C1720BDEA309CD7BF01EF05 /* Debug */, - 16A64F14743B7A0EC27E5B47D6E08B41 /* Release */, + E09F9FDADF04D3E7A36776069400600B /* Debug */, + D7FDD52E5B79A418162D75F787ED258E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1555,6 +1927,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + FCC0E86E1005B36DF47BE75188CE88E2 /* Build configuration list for PBXNativeTarget "Specta" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 46492DBC1FF4FD2A326D70ADAECEF604 /* Debug */, + 971DD04F43B92A1B94DB0EDDDF0163E7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; diff --git a/Example/Pods/Target Support Files/Analytics/Analytics-umbrella.h b/Example/Pods/Target Support Files/Analytics/Analytics-umbrella.h index a3cac0514..6c9637c9c 100644 --- a/Example/Pods/Target Support Files/Analytics/Analytics-umbrella.h +++ b/Example/Pods/Target Support Files/Analytics/Analytics-umbrella.h @@ -9,9 +9,9 @@ #import "SEGScreenPayload.h" #import "SEGTrackPayload.h" #import "NSData+GZIP.h" -#import "SEGAnalyticsRequest.h" #import "SEGAnalyticsUtils.h" #import "SEGBluetooth.h" +#import "SEGHTTPClient.h" #import "SEGLocation.h" #import "SEGReachability.h" #import "SEGSegmentIntegration.h" diff --git a/Example/Pods/Target Support Files/Nocilla/Info.plist b/Example/Pods/Target Support Files/Nocilla/Info.plist new file mode 100644 index 000000000..994ffe8d2 --- /dev/null +++ b/Example/Pods/Target Support Files/Nocilla/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.10.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Nocilla/Nocilla-dummy.m b/Example/Pods/Target Support Files/Nocilla/Nocilla-dummy.m new file mode 100644 index 000000000..bf67e7a90 --- /dev/null +++ b/Example/Pods/Target Support Files/Nocilla/Nocilla-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Nocilla : NSObject +@end +@implementation PodsDummy_Nocilla +@end diff --git a/Example/Pods/Target Support Files/Nocilla/Nocilla-prefix.pch b/Example/Pods/Target Support Files/Nocilla/Nocilla-prefix.pch new file mode 100644 index 000000000..aa992a4ad --- /dev/null +++ b/Example/Pods/Target Support Files/Nocilla/Nocilla-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/Example/Pods/Target Support Files/Nocilla/Nocilla-umbrella.h b/Example/Pods/Target Support Files/Nocilla/Nocilla-umbrella.h new file mode 100644 index 000000000..f9bc72cb9 --- /dev/null +++ b/Example/Pods/Target Support Files/Nocilla/Nocilla-umbrella.h @@ -0,0 +1,17 @@ +#import + +#import "NSData+Nocilla.h" +#import "NSString+Nocilla.h" +#import "LSStubRequestDSL.h" +#import "LSStubResponseDSL.h" +#import "LSNocilla.h" +#import "LSMatcheable.h" +#import "NSData+Matcheable.h" +#import "NSRegularExpression+Matcheable.h" +#import "NSString+Matcheable.h" +#import "LSHTTPBody.h" +#import "Nocilla.h" + +FOUNDATION_EXPORT double NocillaVersionNumber; +FOUNDATION_EXPORT const unsigned char NocillaVersionString[]; + diff --git a/Example/Pods/Target Support Files/Nocilla/Nocilla.modulemap b/Example/Pods/Target Support Files/Nocilla/Nocilla.modulemap new file mode 100644 index 000000000..01df4e2e5 --- /dev/null +++ b/Example/Pods/Target Support Files/Nocilla/Nocilla.modulemap @@ -0,0 +1,6 @@ +framework module Nocilla { + umbrella header "Nocilla-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/Nocilla/Nocilla.xcconfig b/Example/Pods/Target Support Files/Nocilla/Nocilla.xcconfig new file mode 100644 index 000000000..2598e3cad --- /dev/null +++ b/Example/Pods/Target Support Files/Nocilla/Nocilla.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Nocilla +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +OTHER_LDFLAGS = -framework "CFNetwork" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests-acknowledgements.markdown index 1655dc8b1..b961c9737 100644 --- a/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests-acknowledgements.markdown +++ b/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests-acknowledgements.markdown @@ -24,6 +24,30 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +## Nocilla + +Copyright (c) 2012 Luis Solano Bonet +MIT License + +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. + ## Specta Copyright (c) 2012-2014 Specta Team. diff --git a/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests-acknowledgements.plist index 5490081d7..25378c9c0 100644 --- a/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests-acknowledgements.plist +++ b/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests-acknowledgements.plist @@ -39,6 +39,34 @@ THE SOFTWARE. Type PSGroupSpecifier + + FooterText + Copyright (c) 2012 Luis Solano Bonet +MIT License + +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 + Nocilla + Type + PSGroupSpecifier + FooterText Copyright (c) 2012-2014 Specta Team. diff --git a/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests-frameworks.sh b/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests-frameworks.sh index 868bd23fe..ddb98e3e7 100755 --- a/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests-frameworks.sh +++ b/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests-frameworks.sh @@ -85,9 +85,11 @@ strip_invalid_archs() { if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "$BUILT_PRODUCTS_DIR/Expecta/Expecta.framework" + install_framework "$BUILT_PRODUCTS_DIR/Nocilla/Nocilla.framework" install_framework "$BUILT_PRODUCTS_DIR/Specta/Specta.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "$BUILT_PRODUCTS_DIR/Expecta/Expecta.framework" + install_framework "$BUILT_PRODUCTS_DIR/Nocilla/Nocilla.framework" install_framework "$BUILT_PRODUCTS_DIR/Specta/Specta.framework" fi diff --git a/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests.debug.xcconfig index 562d43324..fc6a326e7 100644 --- a/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests.debug.xcconfig @@ -1,8 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Expecta" "$PODS_CONFIGURATION_BUILD_DIR/Specta" "$PODS_CONFIGURATION_BUILD_DIR/Analytics" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Expecta" "$PODS_CONFIGURATION_BUILD_DIR/Nocilla" "$PODS_CONFIGURATION_BUILD_DIR/Specta" "$PODS_CONFIGURATION_BUILD_DIR/Analytics" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Expecta/Expecta.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Specta/Specta.framework/Headers" $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Analytics/Analytics.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Expecta" -framework "Specta" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Expecta/Expecta.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Nocilla/Nocilla.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Specta/Specta.framework/Headers" $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Analytics/Analytics.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "Expecta" -framework "Nocilla" -framework "Specta" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests.release.xcconfig index 562d43324..fc6a326e7 100644 --- a/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-Analytics_Tests/Pods-Analytics_Tests.release.xcconfig @@ -1,8 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Expecta" "$PODS_CONFIGURATION_BUILD_DIR/Specta" "$PODS_CONFIGURATION_BUILD_DIR/Analytics" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Expecta" "$PODS_CONFIGURATION_BUILD_DIR/Nocilla" "$PODS_CONFIGURATION_BUILD_DIR/Specta" "$PODS_CONFIGURATION_BUILD_DIR/Analytics" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Expecta/Expecta.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Specta/Specta.framework/Headers" $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Analytics/Analytics.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Expecta" -framework "Specta" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Expecta/Expecta.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Nocilla/Nocilla.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Specta/Specta.framework/Headers" $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Analytics/Analytics.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "Expecta" -framework "Nocilla" -framework "Specta" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Tests/SEGHTTPClientTests.m b/Example/Tests/SEGHTTPClientTests.m new file mode 100644 index 000000000..a665d4cae --- /dev/null +++ b/Example/Tests/SEGHTTPClientTests.m @@ -0,0 +1,242 @@ +#import +#import +#import +#import + +SpecBegin(SEGHTTPClient); + +describe(@"SEGHTTPClient", ^{ + beforeAll(^{ + [[LSNocilla sharedInstance] start]; + }); + afterAll(^{ + [[LSNocilla sharedInstance] stop]; + }); + afterEach(^{ + [[LSNocilla sharedInstance] clearStubs]; + }); + + describe(@"defaultRequestFactory", ^{ + it(@"preserves url", ^{ + SEGRequestFactory factory = [SEGHTTPClient defaultRequestFactory]; + NSURL *url = [NSURL URLWithString:@"https://api.segment.io/v1/batch"]; + NSMutableURLRequest *request = factory(url); + expect(request.URL).to.equal(url); + }); + }); + + describe(@"settingsForWriteKey", ^{ + it(@"succeeds for 2xx response", ^{ + stubRequest(@"GET", @"https://cdn.segment.com/v1/projects/foo/settings") + .withHeaders(@{ @"Accept-Encoding" : @"gzip" }) + .andReturn(200) + .withHeaders(@{ @"Content-Type" : @"application/json" }) + .withBody(@"{\"integrations\":{\"Segment.io\":{\"apiKey\":\"foo\"}},\"plan\":{\"track\":{}}}"); + + SEGHTTPClient *client = [[SEGHTTPClient alloc] initWithRequestFactory:nil]; + + waitUntil(^(DoneCallback done) { + NSURLSessionDataTask *task = [client settingsForWriteKey:@"foo" completionHandler:^(BOOL success, NSDictionary *settings) { + expect(success).to.equal(YES); + expect(settings).to.equal(@{ + @"integrations" : @{ + @"Segment.io" : @{ + @"apiKey" : @"foo" + } + }, + @"plan" : @{ + @"track" : @{} + } + }); + done(); + }]; + expect(task.state).will.equal(NSURLSessionTaskStateCompleted); + }); + }); + + it(@"fails for for non 2xx response", ^{ + stubRequest(@"GET", @"https://cdn.segment.com/v1/projects/foo/settings") + .withHeaders(@{ @"Accept-Encoding" : @"gzip" }) + .andReturn(400) + .withHeaders(@{ @"Content-Type" : @"application/json" }) + .withBody(@"{\"integrations\":{\"Segment.io\":{\"apiKey\":\"foo\"}},\"plan\":{\"track\":{}}}"); + + SEGHTTPClient *client = [[SEGHTTPClient alloc] initWithRequestFactory:nil]; + + waitUntil(^(DoneCallback done) { + NSURLSessionDataTask *task = [client settingsForWriteKey:@"foo" completionHandler:^(BOOL success, NSDictionary *settings) { + expect(success).to.equal(NO); + expect(settings).to.equal(nil); + done(); + }]; + expect(task.state).will.equal(NSURLSessionTaskStateCompleted); + }); + }); + + it(@"fails for json error", ^{ + stubRequest(@"GET", @"https://cdn.segment.com/v1/projects/foo/settings") + .withHeaders(@{ @"Accept-Encoding" : @"gzip" }) + .andReturn(200) + .withHeaders(@{ @"Content-Type" : @"application/json" }) + .withBody(@"{\"integrations"); + + SEGHTTPClient *client = [[SEGHTTPClient alloc] initWithRequestFactory:nil]; + + waitUntil(^(DoneCallback done) { + NSURLSessionDataTask *task = [client settingsForWriteKey:@"foo" completionHandler:^(BOOL success, NSDictionary *settings) { + expect(success).to.equal(NO); + expect(settings).to.equal(nil); + done(); + }]; + expect(task.state).will.equal(NSURLSessionTaskStateCompleted); + }); + }); + }); + + describe(@"upload", ^{ + it(@"does not ask to retry for json error", ^{ + NSDictionary *batch = @{ + // Dates cannot be serialized as is so the json serialzation will fail. + @"sentAt" : [NSDate date], + @"batch" : @[ @{@"type" : @"track", @"event" : @"foo"} ] + }; + + SEGHTTPClient *client = [[SEGHTTPClient alloc] initWithRequestFactory:nil]; + + waitUntil(^(DoneCallback done) { + NSURLSessionDataTask *task = [client upload:batch forWriteKey:@"bar" completionHandler:^(BOOL retry) { + expect(retry).to.equal(NO); + done(); + }]; + expect(task).to.equal(nil); + }); + }); + + it(@"does not ask to retry for 2xx response", ^{ + NSDictionary *batch = @{ + @"sentAt" : @"2016-07-19'T'19:25:06Z", + @"batch" : @[ @{@"type" : @"track", @"event" : @"foo"} ] + }; + NSString *base64Body = @"H4sIAAAAAAAAA6tWSkosSc5QsoquViqpLEhVslIqKUpMzlbSUUotS80rAfLT8vOVamN1lIqBXEeQgJGBoZmugbmuoaV6iLqhpZWRqZWBWZRSLQB8HDmdTAAAAA=="; + NSData *body = [[NSData alloc] initWithBase64EncodedString:base64Body options:0]; + + stubRequest(@"POST", @"https://api.segment.io/v1/batch") + .withHeaders(@{ + @"Accept-Encoding" : @"gzip", + @"Authorization" : @"Basic YmFyOg==", + @"Content-Encoding" : @"gzip", + @"Content-Length" : @"91", + @"Content-Type" : @"application/json" + }) + .withBody(body) + .andReturn(200) + .withBody(@"{\"success\": true"); + + SEGHTTPClient *client = [[SEGHTTPClient alloc] initWithRequestFactory:nil]; + + waitUntil(^(DoneCallback done) { + NSURLSessionDataTask *task = [client upload:batch forWriteKey:@"bar" completionHandler:^(BOOL retry) { + expect(retry).to.equal(NO); + done(); + }]; + expect(task.state).will.equal(NSURLSessionTaskStateCompleted); + }); + }); + + it(@"asks to retry for 3xx response", ^{ + NSDictionary *batch = @{ + @"sentAt" : @"2016-07-19'T'19:25:06Z", + @"batch" : @[ @{@"type" : @"track", @"event" : @"foo"} ] + }; + NSString *base64Body = @"H4sIAAAAAAAAA6tWSkosSc5QsoquViqpLEhVslIqKUpMzlbSUUotS80rAfLT8vOVamN1lIqBXEeQgJGBoZmugbmuoaV6iLqhpZWRqZWBWZRSLQB8HDmdTAAAAA=="; + NSData *body = [[NSData alloc] initWithBase64EncodedString:base64Body options:0]; + + stubRequest(@"POST", @"https://api.segment.io/v1/batch") + .withHeaders(@{ + @"Accept-Encoding" : @"gzip", + @"Authorization" : @"Basic YmFyOg==", + @"Content-Encoding" : @"gzip", + @"Content-Length" : @"91", + @"Content-Type" : @"application/json" + }) + .withBody(body) + .andReturn(304) + .withBody(@"{\"success\": true"); + + SEGHTTPClient *client = [[SEGHTTPClient alloc] initWithRequestFactory:nil]; + + waitUntil(^(DoneCallback done) { + NSURLSessionDataTask *task = [client upload:batch forWriteKey:@"bar" completionHandler:^(BOOL retry) { + expect(retry).to.equal(YES); + done(); + }]; + expect(task.state).will.equal(NSURLSessionTaskStateCompleted); + }); + }); + + it(@"does not ask to retry for 4xx response", ^{ + NSDictionary *batch = @{ + @"sentAt" : @"2016-07-19'T'19:25:06Z", + @"batch" : @[ @{@"type" : @"track", @"event" : @"foo"} ] + }; + NSString *base64Body = @"H4sIAAAAAAAAA6tWSkosSc5QsoquViqpLEhVslIqKUpMzlbSUUotS80rAfLT8vOVamN1lIqBXEeQgJGBoZmugbmuoaV6iLqhpZWRqZWBWZRSLQB8HDmdTAAAAA=="; + NSData *body = [[NSData alloc] initWithBase64EncodedString:base64Body options:0]; + + stubRequest(@"POST", @"https://api.segment.io/v1/batch") + .withHeaders(@{ + @"Accept-Encoding" : @"gzip", + @"Authorization" : @"Basic YmFyOg==", + @"Content-Encoding" : @"gzip", + @"Content-Length" : @"91", + @"Content-Type" : @"application/json" + }) + .withBody(body) + .andReturn(401) + .withBody(@"{\"success\": true"); + + SEGHTTPClient *client = [[SEGHTTPClient alloc] initWithRequestFactory:nil]; + + waitUntil(^(DoneCallback done) { + NSURLSessionDataTask *task = [client upload:batch forWriteKey:@"bar" completionHandler:^(BOOL retry) { + expect(retry).to.equal(NO); + done(); + }]; + expect(task.state).will.equal(NSURLSessionTaskStateCompleted); + }); + }); + + it(@"asks to retry for 5xx response", ^{ + NSDictionary *batch = @{ + @"sentAt" : @"2016-07-19'T'19:25:06Z", + @"batch" : @[ @{@"type" : @"track", @"event" : @"foo"} ] + }; + NSString *base64Body = @"H4sIAAAAAAAAA6tWSkosSc5QsoquViqpLEhVslIqKUpMzlbSUUotS80rAfLT8vOVamN1lIqBXEeQgJGBoZmugbmuoaV6iLqhpZWRqZWBWZRSLQB8HDmdTAAAAA=="; + NSData *body = [[NSData alloc] initWithBase64EncodedString:base64Body options:0]; + + stubRequest(@"POST", @"https://api.segment.io/v1/batch") + .withHeaders(@{ + @"Accept-Encoding" : @"gzip", + @"Authorization" : @"Basic YmFyOg==", + @"Content-Encoding" : @"gzip", + @"Content-Length" : @"91", + @"Content-Type" : @"application/json" + }) + .withBody(body) + .andReturn(504) + .withBody(@"{\"success\": true"); + + SEGHTTPClient *client = [[SEGHTTPClient alloc] initWithRequestFactory:nil]; + + waitUntil(^(DoneCallback done) { + NSURLSessionDataTask *task = [client upload:batch forWriteKey:@"bar" completionHandler:^(BOOL retry) { + expect(retry).to.equal(YES); + done(); + }]; + expect(task.state).will.equal(NSURLSessionTaskStateCompleted); + }); + }); + }); + +}); + +SpecEnd diff --git a/Example/Tests/Tests-Prefix.pch b/Example/Tests/Tests-Prefix.pch index b84cd5912..e7e1e5eb0 100644 --- a/Example/Tests/Tests-Prefix.pch +++ b/Example/Tests/Tests-Prefix.pch @@ -2,7 +2,7 @@ #ifdef __OBJC__ - @import Specta; - @import Expecta; +#import +#import #endif diff --git a/Example/Tests/Tests.m b/Example/Tests/Tests.m index 840074664..ea5845aaa 100644 --- a/Example/Tests/Tests.m +++ b/Example/Tests/Tests.m @@ -1,5 +1,4 @@ #import -#import #import SpecBegin(Analytics); From 9dc4aa5fae8e5b72356b5230975b3ee0f9fd0638 Mon Sep 17 00:00:00 2001 From: Martin Ceperley Date: Tue, 2 Aug 2016 14:48:05 -0400 Subject: [PATCH 4/5] Fix assert (#583) Fixes #582 --- Analytics/Classes/SEGAnalytics.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Analytics/Classes/SEGAnalytics.m b/Analytics/Classes/SEGAnalytics.m index af12a9d98..301d36808 100644 --- a/Analytics/Classes/SEGAnalytics.m +++ b/Analytics/Classes/SEGAnalytics.m @@ -256,7 +256,7 @@ - (void)identify:(NSString *)userId traits:(NSDictionary *)traits - (void)identify:(NSString *)userId traits:(NSDictionary *)traits options:(NSDictionary *)options { - NSCAssert2(userId.length > 0 > traits.count > 0, @"either userId (%@) or traits (%@) must be provided.", userId, traits); + NSCAssert2(userId.length > 0 || traits.count > 0, @"either userId (%@) or traits (%@) must be provided.", userId, traits); NSString *anonymousId = [options objectForKey:@"anonymousId"]; if (anonymousId) { From 34b7269b189a7c624571b70162eb9bb1c25fdbd9 Mon Sep 17 00:00:00 2001 From: Prateek Srivastava Date: Fri, 5 Aug 2016 07:30:57 -0600 Subject: [PATCH 5/5] Namespace gzip extension class. (#585) See https://github.com/segmentio/analytics-ios/issues/584 --- .../{NSData+GZIP.h => NSData+SEGGZIP.h} | 0 .../{NSData+GZIP.m => NSData+SEGGZIP.m} | 14 +- Analytics/Classes/Internal/SEGHTTPClient.m | 2 +- .../Classes/Internal/SEGSegmentIntegration.m | 1 - Example/Pods/Pods.xcodeproj/project.pbxproj | 268 +++++++++--------- .../Analytics/Analytics-umbrella.h | 2 +- Example/Tests/SEGHTTPClientTests.m | 2 +- 7 files changed, 144 insertions(+), 145 deletions(-) rename Analytics/Classes/Internal/{NSData+GZIP.h => NSData+SEGGZIP.h} (100%) rename Analytics/Classes/Internal/{NSData+GZIP.m => NSData+SEGGZIP.m} (95%) diff --git a/Analytics/Classes/Internal/NSData+GZIP.h b/Analytics/Classes/Internal/NSData+SEGGZIP.h similarity index 100% rename from Analytics/Classes/Internal/NSData+GZIP.h rename to Analytics/Classes/Internal/NSData+SEGGZIP.h diff --git a/Analytics/Classes/Internal/NSData+GZIP.m b/Analytics/Classes/Internal/NSData+SEGGZIP.m similarity index 95% rename from Analytics/Classes/Internal/NSData+GZIP.m rename to Analytics/Classes/Internal/NSData+SEGGZIP.m index 6b1f546d8..60061a406 100644 --- a/Analytics/Classes/Internal/NSData+GZIP.m +++ b/Analytics/Classes/Internal/NSData+SEGGZIP.m @@ -31,7 +31,7 @@ // -#import "NSData+GZIP.h" +#import "NSData+SEGGZIP.h" #import #import @@ -56,13 +56,13 @@ - (NSData *)seg_gzippedDataWithCompressionLevel:(float)level if (self.length == 0 || [self seg_isGzippedData]) { return self; } - + void *libz = seg_libzOpen(); int (*deflateInit2_)(z_streamp, int, int, int, int, int, const char *, int) = - (int (*)(z_streamp, int, int, int, int, int, const char *, int))dlsym(libz, "deflateInit2_"); + (int (*)(z_streamp, int, int, int, int, int, const char *, int))dlsym(libz, "deflateInit2_"); int (*deflate)(z_streamp, int) = (int (*)(z_streamp, int))dlsym(libz, "deflate"); int (*deflateEnd)(z_streamp) = (int (*)(z_streamp))dlsym(libz, "deflateEnd"); - + z_stream stream; stream.zalloc = Z_NULL; stream.zfree = Z_NULL; @@ -71,9 +71,9 @@ - (NSData *)seg_gzippedDataWithCompressionLevel:(float)level stream.next_in = (Bytef *)(void *)self.bytes; stream.total_out = 0; stream.avail_out = 0; - + static const NSUInteger ChunkSize = 16384; - + NSMutableData *output = nil; int compression = (level < 0.0f) ? Z_DEFAULT_COMPRESSION : (int)(roundf(level * 9)); if (deflateInit2(&stream, compression, Z_DEFLATED, 31, 8, Z_DEFAULT_STRATEGY) == Z_OK) { @@ -89,7 +89,7 @@ - (NSData *)seg_gzippedDataWithCompressionLevel:(float)level deflateEnd(&stream); output.length = stream.total_out; } - + return output; } diff --git a/Analytics/Classes/Internal/SEGHTTPClient.m b/Analytics/Classes/Internal/SEGHTTPClient.m index c85344efc..a6c63c41f 100644 --- a/Analytics/Classes/Internal/SEGHTTPClient.m +++ b/Analytics/Classes/Internal/SEGHTTPClient.m @@ -1,5 +1,5 @@ #import "SEGHTTPClient.h" -#import "NSData+GZIP.h" +#import "NSData+SEGGZIP.h" #import "SEGAnalyticsUtils.h" diff --git a/Analytics/Classes/Internal/SEGSegmentIntegration.m b/Analytics/Classes/Internal/SEGSegmentIntegration.m index eb6cc9cda..6cf2651b9 100644 --- a/Analytics/Classes/Internal/SEGSegmentIntegration.m +++ b/Analytics/Classes/Internal/SEGSegmentIntegration.m @@ -7,7 +7,6 @@ #import "SEGBluetooth.h" #import "SEGReachability.h" #import "SEGLocation.h" -#import "NSData+GZIP.h" #import "SEGHTTPClient.h" #if TARGET_OS_IOS diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 448151a78..76944243b 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,20 +7,19 @@ objects = { /* Begin PBXBuildFile section */ - 00CBED9954E20CEAFAB62EBC2C6D1AC2 /* SEGAnalyticsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DBFFD1B512B8783254B83EE9779BDF /* SEGAnalyticsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; 01304C20BC2C7E959D452DF9D0FAD0B6 /* Specta.h in Headers */ = {isa = PBXBuildFile; fileRef = 41657CB8575AD4F6ED3C41808EFBAAFF /* Specta.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 017FA696C155C9139B23611A54C315A9 /* SEGTrackPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = C94F72101EEBF1EDE5E101FC2E6AA35B /* SEGTrackPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; 02F6B0D7B86AB56F90307DB23E661896 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 348E28395AC3E9B59263F66C9B316799 /* XCTest.framework */; }; 036DC31354B4DFA82ABC0D96D68D1DF6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */; }; - 03B1EC3A856CCA8E9363490D1EC67402 /* SEGLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE3D70C67390C71AD4017AC6A272273A /* SEGLocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 03818163A522CE759866C29D654F469C /* SEGBluetooth.m in Sources */ = {isa = PBXBuildFile; fileRef = 1690FDF5CCEF0ABAADCD8708780782D0 /* SEGBluetooth.m */; }; 05FC69F940FABFD8407DB2C7C300EEE4 /* SPTExampleGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 420D34612C84353D8EE232B5BE7A6593 /* SPTExampleGroup.m */; }; 08D3436DDB71F2C2250BBDFBE80B2D23 /* LSStubRequestDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EE6D868687E658E956E0558A26DCF81 /* LSStubRequestDSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0AD434F1EE4803CB93B7298DF5704EA8 /* SEGGroupPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = A21DCEA714702B96A8020B32249F7F05 /* SEGGroupPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0C6FF91EB1F0391ED75DC72D31D159EF /* EXPMatchers+beTruthy.m in Sources */ = {isa = PBXBuildFile; fileRef = 035E9D6E0275BCAFD58AF47623DB22DF /* EXPMatchers+beTruthy.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 0CEC9AE7F285514B6F72CB302B63DD4F /* SEGReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 75341CC2685C2C9FAF02EFAA538C591A /* SEGReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0D16B556212D317A0D4FEB71E102E207 /* EXPMatchers+beLessThan.h in Headers */ = {isa = PBXBuildFile; fileRef = F4E609243D8AB1B2E70A8F2C5E9F7186 /* EXPMatchers+beLessThan.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0D96C808906230C689C8310AC8E7DF5B /* LSNSURLSessionHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 25F5A3115A623DA04AA16CFEC74F2EF9 /* LSNSURLSessionHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0EBFA5FBE4953A83B677CE2A75746761 /* EXPMatchers+beLessThan.m in Sources */ = {isa = PBXBuildFile; fileRef = 90FBD137D0DEDCABC737FF2FDFBEFCBA /* EXPMatchers+beLessThan.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 0F94F5B0ABB3252B9275B7C129EC7A26 /* EXPMatchers+equal.h in Headers */ = {isa = PBXBuildFile; fileRef = 367CD2B562A7D4E32D8B08A63DA602ED /* EXPMatchers+equal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 100973774AE7C50C13731F5A56EDB0A7 /* SEGHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = ABD3A8A2E5C2D705B3B2F976221E6748 /* SEGHTTPClient.m */; }; 11C1AEB289C1EB80089349B71F09D04B /* EXPMatchers+raiseWithReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D97130E4590D9EBE6FDAE4AFCA402B /* EXPMatchers+raiseWithReason.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1277359C8D8BB837B24617969BAAC9DF /* NSRegularExpression+Matcheable.m in Sources */ = {isa = PBXBuildFile; fileRef = BE47DB6B3284121632123362631DE174 /* NSRegularExpression+Matcheable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 128B9A07E9D0F95B28E5F1F3483CB7EA /* LSASIHTTPRequestAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = F99FFAD3309B4F39F8BE9FF058F500C0 /* LSASIHTTPRequestAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -30,9 +29,11 @@ 16325200AF77954D55A5F9F56A6433F5 /* LSRegexMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E4A58CAACBA17AEF72394FEA6AA92DE2 /* LSRegexMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 17572374B2AE183C6347C41E8DF8E579 /* EXPMatchers+beFalsy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B15D02A719ABC18B697A175F171D199 /* EXPMatchers+beFalsy.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 183609639E124198767341441931D06D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */; }; + 19F252BCEC49E582AC0E1D9D533E47E2 /* SEGPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EA5EAF696160B8FCE4415DCB87AC746 /* SEGPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1A1AB2EC52323C5EA28DAA99F1E1A90D /* EXPMatchers+endWith.h in Headers */ = {isa = PBXBuildFile; fileRef = DA87C31144BB044ECD47FB6C44ACB2CC /* EXPMatchers+endWith.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1AB3304B6884F626BC54150AC7565E18 /* EXPMatchers+equal.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A007F3F3B0E1BA3EA6F01CF4311AA2 /* EXPMatchers+equal.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 1B0389CD88AA949B34DC7269030FEC6F /* EXPMatchers+beGreaterThanOrEqualTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 52DDA6BC21D08377214BCAF012289DF5 /* EXPMatchers+beGreaterThanOrEqualTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 1CDB65207041EBE85AC82F1C097F88E9 /* SEGAnalyticsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = BC0D48E47A1AC08B1418D2C75C730E90 /* SEGAnalyticsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1D70460708A86CB706BFAD0E12C41EE2 /* XCTest+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E69917134319E650F4C9F5269A7FDDA /* XCTest+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; 201BF9C605852822CA5A65ADE282A310 /* EXPMatcherHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = DECB1E291A2275FD038BDF383541831A /* EXPMatcherHelpers.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 204D694B03BFF3B244A6AB73FACFFC43 /* Expecta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D7E90431DC0B8E1E7403353232CC41A /* Expecta-dummy.m */; }; @@ -44,151 +45,149 @@ 27832B2605A37241AF9CD554C9ECB6D0 /* LSASIHTTPRequestHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F6572099C332D69E0D8AEF41D4F9F83 /* LSASIHTTPRequestHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; 27FEF9B885DDC6AF516D3816141BF58B /* XCTestCase+Specta.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B69B1E64147D5B5D22E6B8CAF1955AA /* XCTestCase+Specta.m */; }; 2916A0606136A9DC67F2463AB230868B /* EXPMatchers+match.h in Headers */ = {isa = PBXBuildFile; fileRef = 56F8D051211772210563049DD3A251E8 /* EXPMatchers+match.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2A1140DE1AF9BC590ABEC7D33C4AF8D0 /* SEGIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F5B032D6C28D7D23779332687354C86 /* SEGIntegration.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2C0A8737FDB9B9C6A6BDF437FD11334C /* EXPMatchers+beNil.m in Sources */ = {isa = PBXBuildFile; fileRef = C2DEF35243EE7B74E0BADE527AC8E6B0 /* EXPMatchers+beNil.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 2CFE2898496C1C7096DB8DA43AF19103 /* EXPMatchers+raise.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E0684A9A2D760E042578EB213B228AB /* EXPMatchers+raise.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 2D0294A1F074AD370FDFE53FF14199AC /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 348E28395AC3E9B59263F66C9B316799 /* XCTest.framework */; }; 2D650B8931887E7AEAF614ED80FC8DE0 /* Pods-Analytics_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3937A2307ECFEFDF18B81943CB85FE11 /* Pods-Analytics_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D9B75878287C3650BDDB3C06661E7C8 /* SEGSegmentIntegrationFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F987F4D76DF1691DEDEEE8FE2A4F406 /* SEGSegmentIntegrationFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2DA2EC9D7F9B3A8BC5271F9C9F161AF4 /* NSData+SEGGZIP.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C9F28DF4E74B9F2B225436D9EA58C2E /* NSData+SEGGZIP.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2DBDF5B701DC699F0E5A0ADCFF7F3E94 /* NSURLRequest+LSHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 57F611336E125F4ECBD6F0DF8F8CB0C5 /* NSURLRequest+LSHTTPRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2E14619153A453BB8DF389FB6EA147BE /* ExpectaObject.h in Headers */ = {isa = PBXBuildFile; fileRef = DCF1F5F3DBA0F14ACBD55191FE7C28E6 /* ExpectaObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2E4FF0434401AC1DB9F5DBF38D9287D3 /* SEGLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 268853C2956555636C6BD6081F8AAE6D /* SEGLocation.m */; }; 2F427490ACABC4408D57CC0592276678 /* EXPDoubleTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E4C7BB766C918FEA55596360DD0B3BB /* EXPDoubleTuple.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 30E860E40F2D456E532481BF7D54C124 /* SEGScreenPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 354E53CA2386704D8DB4A48EF2CF11E5 /* SEGScreenPayload.m */; }; 34B6E9A30603BEBBD87BA535B7D384CA /* EXPMatchers+beInstanceOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 323E13462D209A8AC526A27D9D767E45 /* EXPMatchers+beInstanceOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 34E62597F5978F7A993623739F71601D /* SEGAnalyticsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F06AC9B7CA83F3048A7254B9068F9C8 /* SEGAnalyticsUtils.m */; }; 372F7A9CCE59CE86316CF436F832A3FC /* EXPMatchers+beGreaterThanOrEqualTo.h in Headers */ = {isa = PBXBuildFile; fileRef = A32C700EBED12A89A370905134C69E44 /* EXPMatchers+beGreaterThanOrEqualTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; 37A2D0F8493469EF2495FC689440F079 /* EXPMatchers+beLessThanOrEqualTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 119280D2BDDC2135EAF4BB7B955E8FAB /* EXPMatchers+beLessThanOrEqualTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37BE7CC360317F2CBDFBAEFCE7B39E30 /* SEGReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = E99DE7F5F39C8A3CBB2529A0987A93BE /* SEGReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; 386B6C6533361BFE379152A810606851 /* XCTestCase+Specta.h in Headers */ = {isa = PBXBuildFile; fileRef = D4AAAFD96AA7809B77E24852A143E81B /* XCTestCase+Specta.h */; settings = {ATTRIBUTES = (Public, ); }; }; 397B320B7C59C168CC5B62E18ED8DEA0 /* EXPMatchers+beSubclassOf.h in Headers */ = {isa = PBXBuildFile; fileRef = E0DAE6457BDB82C50109C4667531F696 /* EXPMatchers+beSubclassOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3A82F4E68E8D3FF7D414E6073346C049 /* SPTTestSuite.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D998F787BB3D83CE6B21CA86B405B46 /* SPTTestSuite.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3B4F15B3D4EBB8580874CFA87CAAB437 /* LSDataMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 048D94BE82C84555D409A93BF039EEE5 /* LSDataMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3B588A1AD8E3D88B70EF1A8D3CF519ED /* LSHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5750F85C4001818E251789B8C0029267 /* LSHTTPRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3B5B7495707BF7133B9FB3F834045611 /* EXPBlockDefinedMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 07F6FEB6A8B5B3C02B1F7AC0B1416F42 /* EXPBlockDefinedMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3BD06A1A9216438AA513BCFF39EE2F30 /* SEGSegmentIntegrationFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = F30FA578EAD204F81712C3A4EC7B1B1E /* SEGSegmentIntegrationFactory.m */; }; 3C2700C7DAA15C6AF84A595865C42F4D /* EXPMatchers+contain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B75167FE543EDAB22C03FFA2C43EB27 /* EXPMatchers+contain.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3C380C634D63206648B6D947901FF88D /* NSData+Nocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = 58EF9D321A4473CCBF2CF307F3A716A1 /* NSData+Nocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3D760AE20F5B60809247E6328D534A80 /* SEGIdentifyPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E64EA832A59F14879437B3965DD8C35 /* SEGIdentifyPayload.m */; }; - 3E5413E2683109B752875EFE723D2227 /* SEGPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = A5BA035D6043B4036AA1DDF515E27387 /* SEGPayload.m */; }; - 3ECFA819FFF561E456D215EB6F2C7A5C /* SEGTrackPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = E207EDD9318353F4CA3E68BBD2CBFD1B /* SEGTrackPayload.m */; }; 3EDF6A877923CA3D380A27BA221A3693 /* LSNSURLSessionHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DC44F50C0C0B23F18EEA2E4452A285E /* LSNSURLSessionHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 403292D82DA62291204BF59524BC4EDB /* EXPMatchers+haveCountOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B1D2940D8C1436462D7D6D8912D3797 /* EXPMatchers+haveCountOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 4064CF661F3AD87993F7BFD4AD26C45D /* LSMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 0381D6093D21AFDDE30CFE22F3BB680D /* LSMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; 41953DAA65006204A4869C536A6B0F2A /* SPTExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B83420442E5AFA48C73D177548DC6AA /* SPTExample.m */; }; 43271DD951A1049D87FF064A1FD87175 /* LSDataMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FF6EF9E62A9175DF61CE4FC4F0CBCF /* LSDataMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 436A0A20916A6DC135B2A053C44CA331 /* LSHTTPStubURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = ECF26B74CC2081100643793D5A3CB1CF /* LSHTTPStubURLProtocol.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 45E572D31967530C97D396B86E4A8749 /* SEGAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B18B8410C6425F24B866CBDB74CABBF /* SEGAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; 46137F5CC368BF38BAF0D0AF81DD8FFE /* EXPMatchers+raise.h in Headers */ = {isa = PBXBuildFile; fileRef = 129E0D30DA701F5E349DEA97F20661CA /* EXPMatchers+raise.h */; settings = {ATTRIBUTES = (Public, ); }; }; 471FD4F68E27AB26FA2AEBB8B245CEE4 /* NSValue+Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = F0C23C26D420E80AD34DF7B0996B25E8 /* NSValue+Expecta.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 47E70B3C1FB83EA2A617E5CEA02735B9 /* SEGIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F5B032D6C28D7D23779332687354C86 /* SEGIntegration.h */; settings = {ATTRIBUTES = (Public, ); }; }; 49727DC45DB1C0FD0D754C89A0B39F7E /* LSNSURLHook.m in Sources */ = {isa = PBXBuildFile; fileRef = D735F936248170D1FDFD5E59888BA634 /* LSNSURLHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 49CBA94E894CB4CF83C7A8EE9711249F /* NSURLRequest+DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 56F3BF36F4B28877AED0C75CDB6C2CF9 /* NSURLRequest+DSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 4B0FACF86699832CB060706698EEDA62 /* LSRegexMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = CCE7C8867802A1DE14149AD62F3983F9 /* LSRegexMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4BB2FB639E6537B6991B248520ABDD94 /* SEGAliasPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = B588367A6A267BEB469E601813B6475F /* SEGAliasPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4BBCBB9D8EF0B241A4A4FE4982985481 /* ExpectaSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = B640F7EF833538A7567F2876134FEC3C /* ExpectaSupport.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 4C33130DFD75412F3E280502FBAA0945 /* SpectaDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 952C900BA9FB23A1C1FB1A1ABFFA27EF /* SpectaDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4DEA938F1EACED5EFF9D45FD037D3BB2 /* LSHTTPRequestDiff.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C45254A956BCDEE1A509CC47D9AE828 /* LSHTTPRequestDiff.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4EF43BE713E7E9C7FD0E7AF28532E6D9 /* SEGAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B18B8410C6425F24B866CBDB74CABBF /* SEGAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; 51DDDB0FB4899757CF6A826B531B940D /* EXPUnsupportedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 756CD0982961FCE099DA103BA646FD59 /* EXPUnsupportedObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; 52695B80D42DFB4C48D7A906478509EB /* ASIHTTPRequestStub.h in Headers */ = {isa = PBXBuildFile; fileRef = A68EE479CD32D935ECB7001FAF476988 /* ASIHTTPRequestStub.h */; settings = {ATTRIBUTES = (Project, ); }; }; 52E493AC179B1F738F42276D7B57E16B /* SPTTestSuite.m in Sources */ = {isa = PBXBuildFile; fileRef = 44FB4DDE2873BC99C9529F866BA25D18 /* SPTTestSuite.m */; }; - 556445BCF5C80A0C0E29BAA555C6047A /* SEGHTTPClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B9E5ADCBDC4F69D8EA948FF51B0D0AB /* SEGHTTPClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 53E1FC22599DC2467C1CFA87CF82C705 /* Analytics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BE093074278010988054D4827E030ABB /* Analytics-dummy.m */; }; 57F39C3A350D0C79515078277A4A30F2 /* NSData+Nocilla.m in Sources */ = {isa = PBXBuildFile; fileRef = 04102C8A636C2565CCD3FBB08DA3B957 /* NSData+Nocilla.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 5879A13A87CC9D9BEDE5351704BDA541 /* SPTExcludeGlobalBeforeAfterEach.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A9FBDBCA6592F4689ED88CC150A26F /* SPTExcludeGlobalBeforeAfterEach.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5B2D4A621D3DA971A474776AF36BB073 /* EXPBlockDefinedMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D170E667AE51D1E486429CF9EB14F8E2 /* EXPBlockDefinedMatcher.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 5B4AC8A357D5257AC7361DFCD16EFC20 /* SEGHTTPClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E186BE69F61E7EDBE62801AE998DC95 /* SEGHTTPClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5BE554338DE6FB62A2C1E198797C3C79 /* NSString+Nocilla.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BCC19A1ADDDD255485E6F7519161F9B /* NSString+Nocilla.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5DFEEE705DFD71AECAB14611FD8C9D93 /* SEGReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = ADF0FC53693A9842E3FB69D92934BA59 /* SEGReachability.m */; }; 5EA7043FE10E75D02F3C3052AF8B8318 /* EXPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E09F4CDEE2C1AF48406C4B1D274F21A /* EXPDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5EE7C2DDFD91350494A3B17E9C8CCAFC /* SEGIntegrationFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = DE36CBC163E9F3578D7D2552F1BF89DD /* SEGIntegrationFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; 60E906CDC30F4C0523F21C90F9491A14 /* LSNocilla.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D88FCD425720D9CDAA8CF432423A50E /* LSNocilla.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 61F8A44E8A863E6BB75069FB1473C8C3 /* SEGHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 9161DD85D2FEE10004CF637D901D9070 /* SEGHTTPClient.m */; }; 63402D899FE759DBD6505CFF19BFD7E3 /* SPTSharedExampleGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = F5268D4F677423311AF279E51E02717D /* SPTSharedExampleGroups.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 63A37D6623A54DB47C2B12D08E02264B /* SEGIdentifyPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = D41DBD56C412C840D2090A4BF5CC6023 /* SEGIdentifyPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; 65BC31095CCDFC80CBF6BBA843751F23 /* EXPMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = FEEF1CCD4245A7A1DD5741CB920D2D0D /* EXPMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; 65E2F7AD000FC4031DE3B3D9C4DD0461 /* NSURLRequest+LSHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = A751917E35042705FAA69CC21DBF68E9 /* NSURLRequest+LSHTTPRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 66A27898E989A3FA5C15AA671C4536F0 /* EXPMatchers+beIdenticalTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 54956A0063A54B236DD3CB15A478F607 /* EXPMatchers+beIdenticalTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 67459AD239EF669A365519E06B45DCFE /* EXPExpect.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CC2B2F237911FB7A48EA0A688CE9DFD /* EXPExpect.h */; settings = {ATTRIBUTES = (Public, ); }; }; 683D42CCDBA04DEAA5927130555865FB /* LSStringMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA21B0A0686B2730612CAA48E246F7C /* LSStringMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; 68648F40FB98A5F4EF4AD187473D1F3D /* SPTSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = EB6E879A49A59A04DF43FA52A7B9ABC5 /* SPTSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6895E8584D9E5DD9FD807FA66594B619 /* SEGStoreKitTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FFBDA242621DB525DC5C434ECEB07D8 /* SEGStoreKitTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6AAD3EF28C1C2DA026B93AD8D814F64D /* Nocilla-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 76010B681AA03D877FD5A52AF8E82C9D /* Nocilla-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6E1D978790705E137FDE439AA68DD3AA /* EXPFloatTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A77024A1E8F3C2079DEEB9C333F7C62 /* EXPFloatTuple.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6EF70D5FEA5E240C75CF1A94F09A22BD /* SEGSegmentIntegrationFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = E966D79DA0495B118117BE69BA364056 /* SEGSegmentIntegrationFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6EC0C9FA543DF6EF0AEC1434823658EB /* UIViewController+SEGScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = F48391C7669C37154448ED565B6D9233 /* UIViewController+SEGScreen.m */; }; 6EFC63A5CED45BB39FC79D87F2C47D6B /* EXPMatchers+beGreaterThan.h in Headers */ = {isa = PBXBuildFile; fileRef = 52269A5CEFF209E97F66A41DB2300E1C /* EXPMatchers+beGreaterThan.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6F278423C8AE1DA47F35E374BB5B91EC /* EXPMatchers+beSupersetOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 35D5D72603A85EDED9BC68C849A71677 /* EXPMatchers+beSupersetOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 6F4BD4857B80D7977A32B05ABFDFC79E /* SEGBluetooth.h in Headers */ = {isa = PBXBuildFile; fileRef = EF85FBA44D56783D225C6A37BF642E1D /* SEGBluetooth.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6F9AC619478339681794CFB2FFF49EA3 /* LSStubRequestDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = BEF8786C83B5717F9219906718C628A9 /* LSStubRequestDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 70F84A543FB8DC8063A9630331204B44 /* SEGScreenPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 302868B704DAA2DFE9B11259778B473E /* SEGScreenPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72D1D73620A94FA53E1B32472F3E00C2 /* SPTExample.h in Headers */ = {isa = PBXBuildFile; fileRef = FCB28A78CDBB39AB53186AED8F73F51A /* SPTExample.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 72E2C941E1D6B2686F50ED36658F1BA3 /* SEGScreenPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 302868B704DAA2DFE9B11259778B473E /* SEGScreenPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7378D773448D44130FB2CF4847619B8D /* LSStubRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = CDE10F02F8C6D0A45FF51B31983F2168 /* LSStubRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 746762DD022722AA0783532E872ACCC0 /* LSHTTPBody.h in Headers */ = {isa = PBXBuildFile; fileRef = 166736907F1E5180FC092545C416D144 /* LSHTTPBody.h */; settings = {ATTRIBUTES = (Public, ); }; }; 74D38E3369D473A7ADA9B2D3F2320B63 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */; }; - 750E8E7A6E8885E3CAE1F8F7B9B57ADC /* SEGLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 667F12E8A368666B10A4BD060F0E1FC5 /* SEGLocation.m */; }; 76CCABE79C04444450153424D7CE1DC1 /* EXPMatchers+beSupersetOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA4D4B8C6E5AF50AB609E295A01DAE5 /* EXPMatchers+beSupersetOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; 76D337327C10A7555447B69AA1562647 /* EXPMatchers+beInstanceOf.m in Sources */ = {isa = PBXBuildFile; fileRef = C22F0A3F7D136F37CBC921C82913151E /* EXPMatchers+beInstanceOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 781A3371065498563238D5E4E7F7BC49 /* LSStubResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = FB8EAF8AD870197091A669E2F17D31C7 /* LSStubResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; 79558B1F97ABE4AB8942DC18BEBD4B82 /* EXPMatchers+beKindOf.h in Headers */ = {isa = PBXBuildFile; fileRef = BCC2B009D60DA44006AF374F9AA779D5 /* EXPMatchers+beKindOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 79ED2E8199BF13D92950ED89A654B13A /* NSData+GZIP.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B3FB8815830BA6655399E9878E181BA /* NSData+GZIP.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7AFCEE99C2A708CAA64C621B4E280087 /* SPTSharedExampleGroups.m in Sources */ = {isa = PBXBuildFile; fileRef = 24565F37B7304C172A8154C3A695BDCB /* SPTSharedExampleGroups.m */; }; 7B223B4E6EF14BA12DA113F7EE10B96C /* NSObject+Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = A4DE49C43591ED9234166839F5158A27 /* NSObject+Expecta.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7CC8165077CEBED403D0B9996DDCE1E3 /* SEGReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = DED7AF9FB2283EBEA906F2E9D6884D10 /* SEGReachability.m */; }; + 7DE4B7B1DA9C7FF9D2B1B4615A8EB759 /* UIViewController+SEGScreen.h in Headers */ = {isa = PBXBuildFile; fileRef = FA89F1F324EFFE5F63AF2C9D97775F3F /* UIViewController+SEGScreen.h */; settings = {ATTRIBUTES = (Public, ); }; }; 805E425BBEF7A6133E32E1D30A073010 /* EXPExpect.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E9DB94FDFB0EDD4A7B005776522AD8F /* EXPExpect.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 80C451D6026B1C2BF6EF917B4F5BF98B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */; }; - 835E821118B7E113219A4FA9637A2876 /* SEGAliasPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C21E4C22CC02DA20E2540F7FACAA4E1 /* SEGAliasPayload.m */; }; 837B593D7C1D01B4EA400247309D6AB0 /* Expecta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 36CEB42FC801D6DD1C0C86F8D5A6B031 /* Expecta-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 85E31076D5530AEEB45ACF16B2B8A983 /* EXPMatchers.h in Headers */ = {isa = PBXBuildFile; fileRef = A92A84FCFC4ABCF6BE29001116807297 /* EXPMatchers.h */; settings = {ATTRIBUTES = (Public, ); }; }; 85EB2F216487CB2E8F3FCCFBC4D69912 /* EXPMatchers+beTruthy.h in Headers */ = {isa = PBXBuildFile; fileRef = 32EC638BEB57AED9169DE0100EF22F2D /* EXPMatchers+beTruthy.h */; settings = {ATTRIBUTES = (Public, ); }; }; 861BC8874F6CC678B0C994082425BB2C /* LSASIHTTPRequestAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = F13E1AE89B0F592308CBD954E0C4FA45 /* LSASIHTTPRequestAdapter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 87FD5F0F682CDEB6A348CA448889E3EA /* EXPMatchers+beKindOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 621F843A137B3E3899CF96CF46CF5A5A /* EXPMatchers+beKindOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 8897AD5D3DBA96C3D02EC51FC6C4F71F /* SEGStoreKitTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = EC37B44F5A4A8FE55A6BC47A2FEB8375 /* SEGStoreKitTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8927C37DD5750B9F6409C3EA80623A16 /* NSURLRequest+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = B69A66C3DB5045ACF35AE9E9F44D01B6 /* NSURLRequest+DSL.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8929941F0C7A48971332804FD69CC3CA /* LSASIHTTPRequestHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 7245ADF080442E19CC8B85AD6F96A6B6 /* LSASIHTTPRequestHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8A38391C03BADD1855970B67897C4BCD /* UIViewController+SEGScreen.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E33D9C28142DB3C7545C518B07D7F00 /* UIViewController+SEGScreen.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B7BE1676BE19245D2C809BE00F239BA /* Analytics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BE093074278010988054D4827E030ABB /* Analytics-dummy.m */; }; 8C8C1B0D83FE6A4352F15154DB16372C /* EXPMatcherHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 81BC3CC72028638F87B514D1A7853EEB /* EXPMatcherHelpers.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8F8D4BABD6C928CFEE32CDA5CC97188A /* Specta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A2B067495F18D88E6AAE62ED9A3A952 /* Specta-dummy.m */; }; + 913A727BA58EBFEBCA86115EF0123003 /* SEGSegmentIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = ED69209F90F0AE41E738AC5C92A87F30 /* SEGSegmentIntegration.h */; settings = {ATTRIBUTES = (Public, ); }; }; 918E06480F28F27361B19D19432F8538 /* EXPMatchers+endWith.m in Sources */ = {isa = PBXBuildFile; fileRef = 81D50D817643B34BE0A6793B8A38C131 /* EXPMatchers+endWith.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 931D410B9F8ACB935883DF8C59F9C93E /* EXPMatchers+postNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = AE5E4907A3648032A5E52DCB25AF70A2 /* EXPMatchers+postNotification.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 937BB86FD6EABBB863B68A0C98160CEE /* SEGSegmentIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F504EDCF181E37EA1125AA0272409FE /* SEGSegmentIntegration.m */; }; 94C47C87E397972CE98F75929F3B706C /* ExpectaObject.m in Sources */ = {isa = PBXBuildFile; fileRef = A4480B33930A9075D36FFA16677F5113 /* ExpectaObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 94EB8FF688C1E8F952B8C167F3F2B0B4 /* SPTCompiledExample.h in Headers */ = {isa = PBXBuildFile; fileRef = CB93789D9F5E4D02164A25D17E4624CB /* SPTCompiledExample.h */; settings = {ATTRIBUTES = (Public, ); }; }; 95F0E3816CCB73CCF8BFAC82C1EDE91B /* SpectaUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = D91118622DEF2A715C0CD5CBA450F494 /* SpectaUtility.m */; }; 98448E68F706C3077F402B1F1B64520E /* NSData+Matcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = DF9CDAC774AF1EC88F9AC25D9F7E84AD /* NSData+Matcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9B2E761A064459F77EA9870BEF03ACC3 /* EXPMatchers+postNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8EFD397EC324185FA95501C7A096F7 /* EXPMatchers+postNotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9BB9159FBA757600D3D4C0FF645F3911 /* EXPMatchers+beInTheRangeOf.m in Sources */ = {isa = PBXBuildFile; fileRef = ADD0C2A882D7119AB07E313F15E6308B /* EXPMatchers+beInTheRangeOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 9E7987C4C41E5C7A8D930B2847A3EF20 /* SEGAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = B0D090B0373B3F51B59F99A087DD9876 /* SEGAnalytics.m */; }; A10DD31CE801172ADE6CADAFC3BEF9CE /* SPTExampleGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = ED7B697D020FD4EE3EBBE0801C80017A /* SPTExampleGroup.h */; settings = {ATTRIBUTES = (Public, ); }; }; A434C8CB0F23A35DA222105C7B11300D /* LSHTTPRequestDiff.h in Headers */ = {isa = PBXBuildFile; fileRef = F6FCFB90F9A4F2EC5FC71A3E0A0D4D48 /* LSHTTPRequestDiff.h */; settings = {ATTRIBUTES = (Project, ); }; }; A460983620B3719092C5217CCC57A699 /* LSHTTPRequestDSLRepresentation.h in Headers */ = {isa = PBXBuildFile; fileRef = 15457E7901D93551F110977610781944 /* LSHTTPRequestDSLRepresentation.h */; settings = {ATTRIBUTES = (Project, ); }; }; A5C90576850BC920FB28CA13242AED17 /* NSData+Matcheable.m in Sources */ = {isa = PBXBuildFile; fileRef = BA4F20DC01C560722BCBB19127C7A148 /* NSData+Matcheable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; A7321D75FDD5D9685F18845E84A206F4 /* SPTSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = ACA9E38A9ABB8CFEF3056F4E22836A79 /* SPTSpec.m */; }; A968114B5888EE6CF93F30331B51FF89 /* SPTCompiledExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 72ADC84696EDBD1596C7756BC3CAAB31 /* SPTCompiledExample.m */; }; - ABF3ECA6CC0D0DB55A283D11FE3F1771 /* SEGBluetooth.m in Sources */ = {isa = PBXBuildFile; fileRef = C04ECE5A1F456FEE55631C245E8069F6 /* SEGBluetooth.m */; }; AF1F46668D4591602887998C6E9C10AD /* EXPMatchers+beCloseTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 19326B1AD9863BA4843E7602B723451C /* EXPMatchers+beCloseTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF484B13886751D179A8B3E58663FD33 /* SEGIdentifyPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E64EA832A59F14879437B3965DD8C35 /* SEGIdentifyPayload.m */; }; AFFC8900E52BBEC72059334132F3A8F3 /* ExpectaSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = EAA0B0D8410A748100182967B6BD8E5D /* ExpectaSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; AFFF59A6580376AFB69A1B0877FEAE98 /* SpectaUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 35910C380D55DE8C13B47AB42B48125D /* SpectaUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B057CD393503769DBB7FCD6AE4173B66 /* SEGAnalyticsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8812DF544FCD5304DFEEDFDB93877EA2 /* SEGAnalyticsUtils.m */; }; B0BD13A01F667B129F4F5F167088A024 /* Nocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = E0923798C6DA8B5F02D377F72EBE9220 /* Nocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; B30D380B5EFCD54FEE04D3C4F1988262 /* NSString+Nocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = EAEEC0CE4F05D24E0928BD1776E06892 /* NSString+Nocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; B479AE437D9B71C51CB95895BCCA7373 /* Specta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 400AC27B28C940AD4C7FED5171E00B73 /* Specta-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B4B9E8A3759D576D35EFEE37A776B6DA /* SEGGroupPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = A21DCEA714702B96A8020B32249F7F05 /* SEGGroupPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; B7185ADC751C1C1B68DCE07933CF0CB5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */; }; B7B6C386D18C61D236CE7B92C62DC4F4 /* LSHTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = DADA5DCACFCC26BAF81CBA77D5DAA680 /* LSHTTPResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; B7BAA1610C192270DE28D6F9ACE95542 /* LSStubResponseDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = FE0F7A461D70E6027BC573A58C77C205 /* LSStubResponseDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; B84431CF8C64F363A334AA7089F6C134 /* NSValue+Expecta.m in Sources */ = {isa = PBXBuildFile; fileRef = DC8C0425C03478A644814F28209B4B59 /* NSValue+Expecta.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; BA12B131F10BCE3BE6E9A02FC908FE9D /* EXPMatchers+beCloseTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 10FB2870274E6A883E945515401DCA07 /* EXPMatchers+beCloseTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - BA2D2E8C8CCC6DB1CBE95D6C171C3100 /* SEGSegmentIntegrationFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D65CF2F4ADA2B0AF79D7D23F00EC344 /* SEGSegmentIntegrationFactory.m */; }; + BC3752AC356067DF109591107D6BBEE8 /* NSData+SEGGZIP.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BE70A0BE6E3AC40EF4AAC64151CCCDC /* NSData+SEGGZIP.m */; }; BC5155194259A004C9DD605674B023A9 /* SpectaTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 271512C3D7207E4C56D018B95B7531C0 /* SpectaTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; BC55C8365AEFF8217F6A567607754854 /* EXPDoubleTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = 180E448B9AF17FE7D45A0668988629FB /* EXPDoubleTuple.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; BDE2564FBEF154A959111B0B91A34ED4 /* SpectaDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = EECB3EED6027FDABD7D3EAF6A92E046F /* SpectaDSL.m */; }; + BEA154ECF7C6ED3CF8C6C0DB54AC77B6 /* SEGAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = B0D090B0373B3F51B59F99A087DD9876 /* SEGAnalytics.m */; }; BEFFE9FFE52E9A0833A7D2D8FB67EB4D /* EXPMatchers+beSubclassOf.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E1163F011E3D444A62D529DD550108 /* EXPMatchers+beSubclassOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; BF3CB6A6F9B86A8723208C7A2418BB10 /* Pods-Analytics_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFDE47A271C4D8EB4957B57FD71DD6E /* Pods-Analytics_Tests-dummy.m */; }; - C2E3AD915C090FFF5AE1DD3586F3BD31 /* SEGSegmentIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C3C10DA689CED703B1405801BFD4ED6 /* SEGSegmentIntegration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C1774B2978C825F944AB75401E099018 /* SEGAliasPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = B588367A6A267BEB469E601813B6475F /* SEGAliasPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; C4F4C8EF4A764C0FDEB5789F9207FFF2 /* LSNSURLHook.h in Headers */ = {isa = PBXBuildFile; fileRef = BFA2BD58C9EFC80EA6F447245DDE8374 /* LSNSURLHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C5F3EBC41706031D0941D1D0195A8D39 /* SEGIntegrationFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = DE36CBC163E9F3578D7D2552F1BF89DD /* SEGIntegrationFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; C6B1AECA74F601617F8329EB45FB0265 /* NSString+Matcheable.m in Sources */ = {isa = PBXBuildFile; fileRef = E36B02538433DEEBA0722170A625F321 /* NSString+Matcheable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; C79A1CD129A1579A7749F570CB4D3962 /* LSHTTPRequestDSLRepresentation.m in Sources */ = {isa = PBXBuildFile; fileRef = EA4C6FC11C1430748A8424DE661C017A /* LSHTTPRequestDSLRepresentation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; CA303CF6D30D41F05C81DF35576B6C34 /* LSMatcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = 5526DDE7CBC2FA01EE8D2FDDCB4D8815 /* LSMatcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA40E122B8FECDC1F1A2C37AF14EBA8A /* Analytics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F8115C1476FCC21E22C39FDAC8BB6EB8 /* Analytics-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CDBB6AA64E2CFC2B0B0FB102EBED8127 /* NSData+GZIP.m in Sources */ = {isa = PBXBuildFile; fileRef = A97117AD8B3E8115570D2934BF04F744 /* NSData+GZIP.m */; }; CE3F4ECBB0BC095577D66AE50C8E604C /* EXPFloatTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DB4CCAC4A118DC45CB2F562BDE1E5AC /* EXPFloatTuple.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + CFF7859C74224C77BC66F32FB7703C7E /* SEGGroupPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D7B595DA38C7DFC60F78642C2073770 /* SEGGroupPayload.m */; }; + D03A170B778B2DDBDBF3B98B9A477CF0 /* SEGSegmentIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 023328B94DE65BA07618E7046973F47E /* SEGSegmentIntegration.m */; }; + D0C4EA5695549C1A7A0C509AADDC530E /* SEGTrackPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = C94F72101EEBF1EDE5E101FC2E6AA35B /* SEGTrackPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; D2B3B8A5532F9F084D2855970798CB82 /* LSHTTPClientHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 04CC74C4C61327B9C4DF18957B7812E3 /* LSHTTPClientHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; D4E2C5E311068E1AA79643974090A086 /* LSStubResponseDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DFA130006D64C9119222D3CC6DEEB97F /* LSStubResponseDSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D7BCFFA5B563E1FD333EC77D14633DC1 /* SEGTrackPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = E207EDD9318353F4CA3E68BBD2CBFD1B /* SEGTrackPayload.m */; }; D83677C54D2226C67886A525B0B46FBE /* EXPMatchers+beLessThanOrEqualTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 63AB1B8A34F9D4B45393CE44CE285382 /* EXPMatchers+beLessThanOrEqualTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + D84D38929D245CF5F96890CD985D299C /* SEGPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = A5BA035D6043B4036AA1DDF515E27387 /* SEGPayload.m */; }; + D85A177AB6B05E3FA5D83B4EB90805EE /* SEGLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8476918918FBB6405D369344E4D62A04 /* SEGLocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; D89A3918634DBBD74E3642EDEFF76A71 /* LSStringMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 68EA8E41E380502BF92641F1CCBA68CA /* LSStringMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; D8D1615374BCBF30AC4B2572E4EA0DE0 /* SPTGlobalBeforeAfterEach.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AB3944B9D9D2C15A730CE655C94C4F1 /* SPTGlobalBeforeAfterEach.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D9600C057A14F3C9F461FB93E0019955 /* SEGPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EA5EAF696160B8FCE4415DCB87AC746 /* SEGPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D9B3D869B64684870A15D16EC496F3A3 /* SEGScreenPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 354E53CA2386704D8DB4A48EF2CF11E5 /* SEGScreenPayload.m */; }; - DAACBD590DEC0537819A015982A9F0FF /* SEGIdentifyPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = D41DBD56C412C840D2090A4BF5CC6023 /* SEGIdentifyPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; DB30F82FB1BE083D9471B965FB500CA2 /* EXPMatchers+conformTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C86E1F5E7B8BE2BA68A3B6416E532D1 /* EXPMatchers+conformTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; DB5E7396AB1F4CA51F6B02A52E3BCA8A /* LSMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D2CFFA1D7BA56478F70ED09046A27493 /* LSMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; DDA4DCAE58682D1F923541927EDD2275 /* LSStubResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 372CBB8F4D124EFE07566B3EFBA4352E /* LSStubResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; @@ -198,11 +197,10 @@ E0A077DFB064B79685B810CCEFB2F1EF /* EXPMatchers+respondTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 43A15CD157816286E186F1211BE7202F /* EXPMatchers+respondTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; E0AAF49134A0505DF00E20E7B62087E1 /* EXPMatchers+beIdenticalTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 65032861CC8655A9899472EF027123E7 /* EXPMatchers+beIdenticalTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; E1EC4532663CA75DE5BD00CB0A56814D /* Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D31811A6DA375FFEB0CC414383588EA /* Expecta.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E4E1E323F67925451C594641D27EAAAB /* UIViewController+SEGScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 62325BDEE6F739C800DD201DE7266003 /* UIViewController+SEGScreen.m */; }; + E25C82C797039CE89D6F6EF2BBDA1DB1 /* Analytics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F8115C1476FCC21E22C39FDAC8BB6EB8 /* Analytics-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E5D5F03212E13D03A9A1016C7BC3A541 /* SEGStoreKitTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = CBC1276AA42415EC62FFD14F92757C24 /* SEGStoreKitTracker.m */; }; E735386085CE344F6A01178CF4763852 /* EXPMatchers+beNil.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FC38653C71A4252F1FD159BB4D1EE4F /* EXPMatchers+beNil.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E87B2BDF61A795AF764D9ACDECB8CDD0 /* SEGStoreKitTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = D426F3C587A1858E81CF1CF37308E72B /* SEGStoreKitTracker.m */; }; EF6497EE123F6BC0C1B09717437C5908 /* EXPUnsupportedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 00407E6E2F0E736DD106AAD3EDD009C6 /* EXPUnsupportedObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - F0BAD7AF329A8213BAC2E1847FCEA088 /* SEGGroupPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D7B595DA38C7DFC60F78642C2073770 /* SEGGroupPayload.m */; }; F0DDF02A078B917997FF025BB33BB842 /* EXPMatchers+conformTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D1397952079E341B332801205983771 /* EXPMatchers+conformTo.h */; settings = {ATTRIBUTES = (Public, ); }; }; F12D57414A73406831CC032A7170DBFF /* EXPMatchers+beginWith.m in Sources */ = {isa = PBXBuildFile; fileRef = E5FFF41A9A24C033FCC946202869A5C9 /* EXPMatchers+beginWith.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; F1B92A4CC0ACE18D6B0B0A2153C13D08 /* ASIHTTPRequestStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F6BBFF3ED908BBB61D8B043C744FDF2 /* ASIHTTPRequestStub.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; @@ -211,12 +209,14 @@ F4043CFB6D8E069D3879DA09F202715F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */; }; F41209A94070904A00BDF24ACB6336B6 /* EXPMatchers+beFalsy.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CA63BF80025A3D25CD928A36136F551 /* EXPMatchers+beFalsy.h */; settings = {ATTRIBUTES = (Public, ); }; }; F75CB2A727F678C9A848A3A11EA7979B /* EXPMatchers+haveCountOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 00F102F1E58C3474E3A809EE1E5B5655 /* EXPMatchers+haveCountOf.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FB525B6CE7C6C882C43F0071B6C4BBD4 /* SEGAliasPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C21E4C22CC02DA20E2540F7FACAA4E1 /* SEGAliasPayload.m */; }; FC20596ABFE14A61F171A29FD03275E7 /* EXPMatchers+contain.m in Sources */ = {isa = PBXBuildFile; fileRef = 426DA9ED9B302E36BAC4BC16F6366C22 /* EXPMatchers+contain.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; FC45858927D3B6A0F922C4B697B04A38 /* EXPMatchers+match.m in Sources */ = {isa = PBXBuildFile; fileRef = F8843B0B76B48BC52F8BE7AD151C48C7 /* EXPMatchers+match.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; FCB4158D0A7BB2032A5D13F0D3758642 /* LSHTTPClientHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C8DB76D2A3AF8110BA31D031027E4D5 /* LSHTTPClientHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; FCFC2208684969E5BDF9F439AEE58162 /* NSString+Matcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FE58475FA0CB0C2C3DDBABEA84C6676 /* NSString+Matcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; FD2D4497BC41412128C2D87C1BDE7398 /* EXPMatchers+beginWith.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DC968F5E8CEE0A8BDD77E1EB542F982 /* EXPMatchers+beginWith.h */; settings = {ATTRIBUTES = (Public, ); }; }; FE8E34356D24F6759A8B010ED2F5707B /* EXPMatchers+raiseWithReason.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C4F938E8FE97C252FA207D0DD372B65 /* EXPMatchers+raiseWithReason.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + FFF7266E53DC64053C3B19DAF238353F /* SEGBluetooth.h in Headers */ = {isa = PBXBuildFile; fileRef = CD2F04EA168926D3C54640D6D9BCADBD /* SEGBluetooth.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -253,6 +253,7 @@ /* Begin PBXFileReference section */ 00407E6E2F0E736DD106AAD3EDD009C6 /* EXPUnsupportedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPUnsupportedObject.m; path = Expecta/EXPUnsupportedObject.m; sourceTree = ""; }; 00F102F1E58C3474E3A809EE1E5B5655 /* EXPMatchers+haveCountOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+haveCountOf.h"; path = "Expecta/Matchers/EXPMatchers+haveCountOf.h"; sourceTree = ""; }; + 023328B94DE65BA07618E7046973F47E /* SEGSegmentIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGSegmentIntegration.m; sourceTree = ""; }; 035E9D6E0275BCAFD58AF47623DB22DF /* EXPMatchers+beTruthy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beTruthy.m"; path = "Expecta/Matchers/EXPMatchers+beTruthy.m"; sourceTree = ""; }; 0381D6093D21AFDDE30CFE22F3BB680D /* LSMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSMatcher.h; path = Nocilla/Matchers/LSMatcher.h; sourceTree = ""; }; 04102C8A636C2565CCD3FBB08DA3B957 /* NSData+Nocilla.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+Nocilla.m"; path = "Nocilla/Categories/NSData+Nocilla.m"; sourceTree = ""; }; @@ -271,28 +272,26 @@ 15457E7901D93551F110977610781944 /* LSHTTPRequestDSLRepresentation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPRequestDSLRepresentation.h; path = Nocilla/DSL/LSHTTPRequestDSLRepresentation.h; sourceTree = ""; }; 15C91B211733F2117793BF2F2343BB56 /* Nocilla.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Nocilla.modulemap; sourceTree = ""; }; 166736907F1E5180FC092545C416D144 /* LSHTTPBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPBody.h; path = Nocilla/Model/LSHTTPBody.h; sourceTree = ""; }; + 1690FDF5CCEF0ABAADCD8708780782D0 /* SEGBluetooth.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGBluetooth.m; sourceTree = ""; }; 180E448B9AF17FE7D45A0668988629FB /* EXPDoubleTuple.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPDoubleTuple.m; path = Expecta/EXPDoubleTuple.m; sourceTree = ""; }; 19326B1AD9863BA4843E7602B723451C /* EXPMatchers+beCloseTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beCloseTo.h"; path = "Expecta/Matchers/EXPMatchers+beCloseTo.h"; sourceTree = ""; }; 1B1D2940D8C1436462D7D6D8912D3797 /* EXPMatchers+haveCountOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+haveCountOf.m"; path = "Expecta/Matchers/EXPMatchers+haveCountOf.m"; sourceTree = ""; }; 1D7E90431DC0B8E1E7403353232CC41A /* Expecta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Expecta-dummy.m"; sourceTree = ""; }; 1DB4CCAC4A118DC45CB2F562BDE1E5AC /* EXPFloatTuple.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPFloatTuple.m; path = Expecta/EXPFloatTuple.m; sourceTree = ""; }; 1E09F4CDEE2C1AF48406C4B1D274F21A /* EXPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPDefines.h; path = Expecta/EXPDefines.h; sourceTree = ""; }; - 1E33D9C28142DB3C7545C518B07D7F00 /* UIViewController+SEGScreen.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIViewController+SEGScreen.h"; sourceTree = ""; }; 1E64EA832A59F14879437B3965DD8C35 /* SEGIdentifyPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGIdentifyPayload.m; sourceTree = ""; }; - 1F504EDCF181E37EA1125AA0272409FE /* SEGSegmentIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGSegmentIntegration.m; sourceTree = ""; }; 1F6BBFF3ED908BBB61D8B043C744FDF2 /* ASIHTTPRequestStub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ASIHTTPRequestStub.m; path = Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.m; sourceTree = ""; }; - 1FFBDA242621DB525DC5C434ECEB07D8 /* SEGStoreKitTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGStoreKitTracker.h; sourceTree = ""; }; 2076CC034F6103DCF45A469B1E548E27 /* Nocilla-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nocilla-prefix.pch"; sourceTree = ""; }; 215FA13C8BB3701687A65C35407C888C /* Expecta-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Expecta-prefix.pch"; sourceTree = ""; }; 238B44026340671D3B7B175CDAA8D5A7 /* Pods-Analytics_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Analytics_Tests-resources.sh"; sourceTree = ""; }; 24565F37B7304C172A8154C3A695BDCB /* SPTSharedExampleGroups.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTSharedExampleGroups.m; path = Specta/Specta/SPTSharedExampleGroups.m; sourceTree = ""; }; 25F5A3115A623DA04AA16CFEC74F2EF9 /* LSNSURLSessionHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSNSURLSessionHook.h; path = Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.h; sourceTree = ""; }; + 268853C2956555636C6BD6081F8AAE6D /* SEGLocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGLocation.m; sourceTree = ""; }; 271512C3D7207E4C56D018B95B7531C0 /* SpectaTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaTypes.h; path = Specta/Specta/SpectaTypes.h; sourceTree = ""; }; 287BFBC3E9767165D9BCD7FD0BAD33D1 /* Nocilla-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nocilla-dummy.m"; sourceTree = ""; }; 298FC6C7A98AAB540EB7F2EB51B6780B /* Pods-Analytics_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Analytics_Example.modulemap"; sourceTree = ""; }; - 2C3C10DA689CED703B1405801BFD4ED6 /* SEGSegmentIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGSegmentIntegration.h; sourceTree = ""; }; + 2BE70A0BE6E3AC40EF4AAC64151CCCDC /* NSData+SEGGZIP.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSData+SEGGZIP.m"; sourceTree = ""; }; 2C8DB76D2A3AF8110BA31D031027E4D5 /* LSHTTPClientHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPClientHook.m; path = Nocilla/Hooks/LSHTTPClientHook.m; sourceTree = ""; }; - 2D65CF2F4ADA2B0AF79D7D23F00EC344 /* SEGSegmentIntegrationFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGSegmentIntegrationFactory.m; sourceTree = ""; }; 2D88FCD425720D9CDAA8CF432423A50E /* LSNocilla.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSNocilla.m; path = Nocilla/LSNocilla.m; sourceTree = ""; }; 2D9258631DD61DF84F3898A4A287FDBE /* Pods-Analytics_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Analytics_Tests-acknowledgements.markdown"; sourceTree = ""; }; 2F5B032D6C28D7D23779332687354C86 /* SEGIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGIntegration.h; sourceTree = ""; }; @@ -325,9 +324,7 @@ 48E6F388DB4C94996CFDB96CF560CBF8 /* EXPMatchers+respondTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+respondTo.h"; path = "Expecta/Matchers/EXPMatchers+respondTo.h"; sourceTree = ""; }; 4A77024A1E8F3C2079DEEB9C333F7C62 /* EXPFloatTuple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPFloatTuple.h; path = Expecta/EXPFloatTuple.h; sourceTree = ""; }; 4B18B8410C6425F24B866CBDB74CABBF /* SEGAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGAnalytics.h; sourceTree = ""; }; - 4B3FB8815830BA6655399E9878E181BA /* NSData+GZIP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSData+GZIP.h"; sourceTree = ""; }; 4B8950BFD3FA25B2C9EB3A08FF93CE3E /* Pods_Analytics_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Analytics_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4B9E5ADCBDC4F69D8EA948FF51B0D0AB /* SEGHTTPClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGHTTPClient.h; sourceTree = ""; }; 4CC2B2F237911FB7A48EA0A688CE9DFD /* EXPExpect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPExpect.h; path = Expecta/EXPExpect.h; sourceTree = ""; }; 4CFDE47A271C4D8EB4957B57FD71DD6E /* Pods-Analytics_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Analytics_Tests-dummy.m"; sourceTree = ""; }; 4DC44F50C0C0B23F18EEA2E4452A285E /* LSNSURLSessionHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSNSURLSessionHook.m; path = Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.m; sourceTree = ""; }; @@ -344,22 +341,24 @@ 5B12869C98411D50EACF87FAC7CCADD0 /* Pods-Analytics_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Analytics_Example-umbrella.h"; sourceTree = ""; }; 5B75167FE543EDAB22C03FFA2C43EB27 /* EXPMatchers+contain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+contain.h"; path = "Expecta/Matchers/EXPMatchers+contain.h"; sourceTree = ""; }; 5D1397952079E341B332801205983771 /* EXPMatchers+conformTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+conformTo.h"; path = "Expecta/Matchers/EXPMatchers+conformTo.h"; sourceTree = ""; }; + 5E186BE69F61E7EDBE62801AE998DC95 /* SEGHTTPClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGHTTPClient.h; sourceTree = ""; }; 5EA21B0A0686B2730612CAA48E246F7C /* LSStringMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStringMatcher.h; path = Nocilla/Matchers/LSStringMatcher.h; sourceTree = ""; }; 5FE58475FA0CB0C2C3DDBABEA84C6676 /* NSString+Matcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Matcheable.h"; path = "Nocilla/Matchers/NSString+Matcheable.h"; sourceTree = ""; }; 621F843A137B3E3899CF96CF46CF5A5A /* EXPMatchers+beKindOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beKindOf.m"; path = "Expecta/Matchers/EXPMatchers+beKindOf.m"; sourceTree = ""; }; - 62325BDEE6F739C800DD201DE7266003 /* UIViewController+SEGScreen.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+SEGScreen.m"; sourceTree = ""; }; 63AB1B8A34F9D4B45393CE44CE285382 /* EXPMatchers+beLessThanOrEqualTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beLessThanOrEqualTo.m"; path = "Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.m"; sourceTree = ""; }; 65032861CC8655A9899472EF027123E7 /* EXPMatchers+beIdenticalTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beIdenticalTo.h"; path = "Expecta/Matchers/EXPMatchers+beIdenticalTo.h"; sourceTree = ""; }; - 667F12E8A368666B10A4BD060F0E1FC5 /* SEGLocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGLocation.m; sourceTree = ""; }; 68EA8E41E380502BF92641F1CCBA68CA /* LSStringMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStringMatcher.m; path = Nocilla/Matchers/LSStringMatcher.m; sourceTree = ""; }; 6A5952869E40BF6D9CCDFAA59BB837CD /* Pods-Analytics_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Analytics_Tests.release.xcconfig"; sourceTree = ""; }; 6AB3944B9D9D2C15A730CE655C94C4F1 /* SPTGlobalBeforeAfterEach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTGlobalBeforeAfterEach.h; path = Specta/Specta/SPTGlobalBeforeAfterEach.h; sourceTree = ""; }; 6B586C9631D8EC14A5F7D93D77325428 /* Pods-Analytics_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Analytics_Example-acknowledgements.markdown"; sourceTree = ""; }; + 6C9F28DF4E74B9F2B225436D9EA58C2E /* NSData+SEGGZIP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSData+SEGGZIP.h"; sourceTree = ""; }; 6CA63BF80025A3D25CD928A36136F551 /* EXPMatchers+beFalsy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beFalsy.h"; path = "Expecta/Matchers/EXPMatchers+beFalsy.h"; sourceTree = ""; }; 6D2BE9DB06FECF3E305E95DB3D41624C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6F987F4D76DF1691DEDEEE8FE2A4F406 /* SEGSegmentIntegrationFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGSegmentIntegrationFactory.h; sourceTree = ""; }; 7245ADF080442E19CC8B85AD6F96A6B6 /* LSASIHTTPRequestHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSASIHTTPRequestHook.m; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.m; sourceTree = ""; }; 725FD454003799E3C5F6FE998212E0D5 /* Pods-Analytics_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Analytics_Tests.debug.xcconfig"; sourceTree = ""; }; 72ADC84696EDBD1596C7756BC3CAAB31 /* SPTCompiledExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTCompiledExample.m; path = Specta/Specta/SPTCompiledExample.m; sourceTree = ""; }; + 75341CC2685C2C9FAF02EFAA538C591A /* SEGReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGReachability.h; sourceTree = ""; }; 756CD0982961FCE099DA103BA646FD59 /* EXPUnsupportedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPUnsupportedObject.h; path = Expecta/EXPUnsupportedObject.h; sourceTree = ""; }; 76010B681AA03D877FD5A52AF8E82C9D /* Nocilla-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nocilla-umbrella.h"; sourceTree = ""; }; 7ABB6B532CF369102165144C3A21CF99 /* SPTCallSite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTCallSite.h; path = Specta/Specta/SPTCallSite.h; sourceTree = ""; }; @@ -374,9 +373,9 @@ 81D50D817643B34BE0A6793B8A38C131 /* EXPMatchers+endWith.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+endWith.m"; path = "Expecta/Matchers/EXPMatchers+endWith.m"; sourceTree = ""; }; 82AD8F63C26D2CE260CA18BE7EA484D3 /* Pods-Analytics_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Analytics_Tests-acknowledgements.plist"; sourceTree = ""; }; 83A007F3F3B0E1BA3EA6F01CF4311AA2 /* EXPMatchers+equal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+equal.m"; path = "Expecta/Matchers/EXPMatchers+equal.m"; sourceTree = ""; }; + 8476918918FBB6405D369344E4D62A04 /* SEGLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGLocation.h; sourceTree = ""; }; 849F819B79FB3963BEA06E1DA0311A0E /* Nocilla.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nocilla.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 85200ECAD4EA459EB0598420E91F81BE /* Analytics.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Analytics.xcconfig; sourceTree = ""; }; - 8812DF544FCD5304DFEEDFDB93877EA2 /* SEGAnalyticsUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGAnalyticsUtils.m; sourceTree = ""; }; 89837BDFCC0B7CF62D0A7488C7BBFC59 /* Analytics.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Analytics.modulemap; sourceTree = ""; }; 89C5D8A8204224B87E1F6A95FDB8E531 /* Pods-Analytics_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Analytics_Example-frameworks.sh"; sourceTree = ""; }; 8B1738538FDE483D368712F0D608FC3D /* Nocilla.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nocilla.xcconfig; sourceTree = ""; }; @@ -386,10 +385,11 @@ 8E69917134319E650F4C9F5269A7FDDA /* XCTest+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "XCTest+Private.h"; path = "Specta/Specta/XCTest+Private.h"; sourceTree = ""; }; 8E8EFD397EC324185FA95501C7A096F7 /* EXPMatchers+postNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+postNotification.h"; path = "Expecta/Matchers/EXPMatchers+postNotification.h"; sourceTree = ""; }; 8E9DB94FDFB0EDD4A7B005776522AD8F /* EXPExpect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPExpect.m; path = Expecta/EXPExpect.m; sourceTree = ""; }; + 8F06AC9B7CA83F3048A7254B9068F9C8 /* SEGAnalyticsUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGAnalyticsUtils.m; sourceTree = ""; }; 907F073F48A74CC1B58FDD4FB141F1A1 /* Pods-Analytics_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Analytics_Example-resources.sh"; sourceTree = ""; }; 90FBD137D0DEDCABC737FF2FDFBEFCBA /* EXPMatchers+beLessThan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beLessThan.m"; path = "Expecta/Matchers/EXPMatchers+beLessThan.m"; sourceTree = ""; }; + 9161DD85D2FEE10004CF637D901D9070 /* SEGHTTPClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGHTTPClient.m; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 93DBFFD1B512B8783254B83EE9779BDF /* SEGAnalyticsUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGAnalyticsUtils.h; sourceTree = ""; }; 94DBD92946E86E0425D0A419D59595F6 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; 952C900BA9FB23A1C1FB1A1ABFFA27EF /* SpectaDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaDSL.h; path = Specta/Specta/SpectaDSL.h; sourceTree = ""; }; 9A2B067495F18D88E6AAE62ED9A3A952 /* Specta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Specta-dummy.m"; sourceTree = ""; }; @@ -406,11 +406,10 @@ A68EE479CD32D935ECB7001FAF476988 /* ASIHTTPRequestStub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ASIHTTPRequestStub.h; path = Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.h; sourceTree = ""; }; A751917E35042705FAA69CC21DBF68E9 /* NSURLRequest+LSHTTPRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLRequest+LSHTTPRequest.m"; path = "Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.m"; sourceTree = ""; }; A92A84FCFC4ABCF6BE29001116807297 /* EXPMatchers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPMatchers.h; path = Expecta/Matchers/EXPMatchers.h; sourceTree = ""; }; - A97117AD8B3E8115570D2934BF04F744 /* NSData+GZIP.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSData+GZIP.m"; sourceTree = ""; }; - ABD3A8A2E5C2D705B3B2F976221E6748 /* SEGHTTPClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGHTTPClient.m; sourceTree = ""; }; ACA9E38A9ABB8CFEF3056F4E22836A79 /* SPTSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTSpec.m; path = Specta/Specta/SPTSpec.m; sourceTree = ""; }; ADAD3ED20015D5D2190C898DE5046699 /* SPTCallSite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTCallSite.m; path = Specta/Specta/SPTCallSite.m; sourceTree = ""; }; ADD0C2A882D7119AB07E313F15E6308B /* EXPMatchers+beInTheRangeOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beInTheRangeOf.m"; path = "Expecta/Matchers/EXPMatchers+beInTheRangeOf.m"; sourceTree = ""; }; + ADF0FC53693A9842E3FB69D92934BA59 /* SEGReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGReachability.m; sourceTree = ""; }; AE5E4907A3648032A5E52DCB25AF70A2 /* EXPMatchers+postNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+postNotification.m"; path = "Expecta/Matchers/EXPMatchers+postNotification.m"; sourceTree = ""; }; B0D090B0373B3F51B59F99A087DD9876 /* SEGAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGAnalytics.m; sourceTree = ""; }; B3A6B6A256E104C90FB0BA3C77916DAF /* Specta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Specta.xcconfig; sourceTree = ""; }; @@ -420,6 +419,7 @@ B6E1163F011E3D444A62D529DD550108 /* EXPMatchers+beSubclassOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beSubclassOf.m"; path = "Expecta/Matchers/EXPMatchers+beSubclassOf.m"; sourceTree = ""; }; B7F90B078EAD016D3617F5FA13AD0878 /* LSHTTPStubURLProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPStubURLProtocol.h; path = Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.h; sourceTree = ""; }; BA4F20DC01C560722BCBB19127C7A148 /* NSData+Matcheable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+Matcheable.m"; path = "Nocilla/Matchers/NSData+Matcheable.m"; sourceTree = ""; }; + BC0D48E47A1AC08B1418D2C75C730E90 /* SEGAnalyticsUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGAnalyticsUtils.h; sourceTree = ""; }; BCC2B009D60DA44006AF374F9AA779D5 /* EXPMatchers+beKindOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beKindOf.h"; path = "Expecta/Matchers/EXPMatchers+beKindOf.h"; sourceTree = ""; }; BD444BE7AACE3345E729ED0A7EE2E468 /* EXPMatchers+beGreaterThan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beGreaterThan.m"; path = "Expecta/Matchers/EXPMatchers+beGreaterThan.m"; sourceTree = ""; }; BD66B7A4E6D29687CDA5EDA6122D4FBC /* LSStubRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubRequest.h; path = Nocilla/Stubs/LSStubRequest.h; sourceTree = ""; }; @@ -427,7 +427,6 @@ BE47DB6B3284121632123362631DE174 /* NSRegularExpression+Matcheable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSRegularExpression+Matcheable.m"; path = "Nocilla/Matchers/NSRegularExpression+Matcheable.m"; sourceTree = ""; }; BEF8786C83B5717F9219906718C628A9 /* LSStubRequestDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubRequestDSL.h; path = Nocilla/DSL/LSStubRequestDSL.h; sourceTree = ""; }; BFA2BD58C9EFC80EA6F447245DDE8374 /* LSNSURLHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSNSURLHook.h; path = Nocilla/Hooks/NSURLRequest/LSNSURLHook.h; sourceTree = ""; }; - C04ECE5A1F456FEE55631C245E8069F6 /* SEGBluetooth.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGBluetooth.m; sourceTree = ""; }; C22F0A3F7D136F37CBC921C82913151E /* EXPMatchers+beInstanceOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beInstanceOf.m"; path = "Expecta/Matchers/EXPMatchers+beInstanceOf.m"; sourceTree = ""; }; C2DEF35243EE7B74E0BADE527AC8E6B0 /* EXPMatchers+beNil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beNil.m"; path = "Expecta/Matchers/EXPMatchers+beNil.m"; sourceTree = ""; }; C39084590F65EF07CEB50F71324CE1B8 /* Analytics-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Analytics-prefix.pch"; sourceTree = ""; }; @@ -435,13 +434,14 @@ C7D5818B281F0F5733D4BD6F5EBC605F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; C94F72101EEBF1EDE5E101FC2E6AA35B /* SEGTrackPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGTrackPayload.h; sourceTree = ""; }; CB93789D9F5E4D02164A25D17E4624CB /* SPTCompiledExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTCompiledExample.h; path = Specta/Specta/SPTCompiledExample.h; sourceTree = ""; }; + CBC1276AA42415EC62FFD14F92757C24 /* SEGStoreKitTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGStoreKitTracker.m; sourceTree = ""; }; CBE6515D380AD0A5F2B850991320F479 /* LSNocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSNocilla.h; path = Nocilla/LSNocilla.h; sourceTree = ""; }; CCE7C8867802A1DE14149AD62F3983F9 /* LSRegexMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSRegexMatcher.h; path = Nocilla/Matchers/LSRegexMatcher.h; sourceTree = ""; }; + CD2F04EA168926D3C54640D6D9BCADBD /* SEGBluetooth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGBluetooth.h; sourceTree = ""; }; CDE10F02F8C6D0A45FF51B31983F2168 /* LSStubRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubRequest.m; path = Nocilla/Stubs/LSStubRequest.m; sourceTree = ""; }; D170E667AE51D1E486429CF9EB14F8E2 /* EXPBlockDefinedMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPBlockDefinedMatcher.m; path = Expecta/EXPBlockDefinedMatcher.m; sourceTree = ""; }; D2CFFA1D7BA56478F70ED09046A27493 /* LSMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSMatcher.m; path = Nocilla/Matchers/LSMatcher.m; sourceTree = ""; }; D41DBD56C412C840D2090A4BF5CC6023 /* SEGIdentifyPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGIdentifyPayload.h; sourceTree = ""; }; - D426F3C587A1858E81CF1CF37308E72B /* SEGStoreKitTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGStoreKitTracker.m; sourceTree = ""; }; D4AAAFD96AA7809B77E24852A143E81B /* XCTestCase+Specta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "XCTestCase+Specta.h"; path = "Specta/Specta/XCTestCase+Specta.h"; sourceTree = ""; }; D735F936248170D1FDFD5E59888BA634 /* LSNSURLHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSNSURLHook.m; path = Nocilla/Hooks/NSURLRequest/LSNSURLHook.m; sourceTree = ""; }; D91118622DEF2A715C0CD5CBA450F494 /* SpectaUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SpectaUtility.m; path = Specta/Specta/SpectaUtility.m; sourceTree = ""; }; @@ -454,7 +454,6 @@ DE36CBC163E9F3578D7D2552F1BF89DD /* SEGIntegrationFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGIntegrationFactory.h; sourceTree = ""; }; DE5E8458E16DE72BEC69B0D4B01C6153 /* Analytics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Analytics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DECB1E291A2275FD038BDF383541831A /* EXPMatcherHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPMatcherHelpers.m; path = Expecta/Matchers/EXPMatcherHelpers.m; sourceTree = ""; }; - DED7AF9FB2283EBEA906F2E9D6884D10 /* SEGReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGReachability.m; sourceTree = ""; }; DF9CDAC774AF1EC88F9AC25D9F7E84AD /* NSData+Matcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+Matcheable.h"; path = "Nocilla/Matchers/NSData+Matcheable.h"; sourceTree = ""; }; DFA130006D64C9119222D3CC6DEEB97F /* LSStubResponseDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubResponseDSL.m; path = Nocilla/DSL/LSStubResponseDSL.m; sourceTree = ""; }; E0923798C6DA8B5F02D377F72EBE9220 /* Nocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nocilla.h; path = Nocilla/Nocilla.h; sourceTree = ""; }; @@ -465,22 +464,22 @@ E5B49F3A2C3775B24797B39C5EDB1D12 /* Specta.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Specta.modulemap; sourceTree = ""; }; E5FFF41A9A24C033FCC946202869A5C9 /* EXPMatchers+beginWith.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beginWith.m"; path = "Expecta/Matchers/EXPMatchers+beginWith.m"; sourceTree = ""; }; E62394DDB3AB915FBBD83243A8B71230 /* Pods-Analytics_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Analytics_Tests.modulemap"; sourceTree = ""; }; - E966D79DA0495B118117BE69BA364056 /* SEGSegmentIntegrationFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGSegmentIntegrationFactory.h; sourceTree = ""; }; - E99DE7F5F39C8A3CBB2529A0987A93BE /* SEGReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGReachability.h; sourceTree = ""; }; E9FBDE3A5453A6D3F1AC72AAF9DEFF36 /* Specta-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Specta-prefix.pch"; sourceTree = ""; }; EA0B4D0A1C53C864E5FBB5AD62ACFBA5 /* Pods-Analytics_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Analytics_Example-acknowledgements.plist"; sourceTree = ""; }; EA4C6FC11C1430748A8424DE661C017A /* LSHTTPRequestDSLRepresentation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPRequestDSLRepresentation.m; path = Nocilla/DSL/LSHTTPRequestDSLRepresentation.m; sourceTree = ""; }; EAA0B0D8410A748100182967B6BD8E5D /* ExpectaSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExpectaSupport.h; path = Expecta/ExpectaSupport.h; sourceTree = ""; }; EAEEC0CE4F05D24E0928BD1776E06892 /* NSString+Nocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Nocilla.h"; path = "Nocilla/Categories/NSString+Nocilla.h"; sourceTree = ""; }; EB6E879A49A59A04DF43FA52A7B9ABC5 /* SPTSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTSpec.h; path = Specta/Specta/SPTSpec.h; sourceTree = ""; }; + EC37B44F5A4A8FE55A6BC47A2FEB8375 /* SEGStoreKitTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGStoreKitTracker.h; sourceTree = ""; }; ECF26B74CC2081100643793D5A3CB1CF /* LSHTTPStubURLProtocol.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPStubURLProtocol.m; path = Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.m; sourceTree = ""; }; + ED69209F90F0AE41E738AC5C92A87F30 /* SEGSegmentIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGSegmentIntegration.h; sourceTree = ""; }; ED7B697D020FD4EE3EBBE0801C80017A /* SPTExampleGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExampleGroup.h; path = Specta/Specta/SPTExampleGroup.h; sourceTree = ""; }; - EE3D70C67390C71AD4017AC6A272273A /* SEGLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGLocation.h; sourceTree = ""; }; EECB3EED6027FDABD7D3EAF6A92E046F /* SpectaDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SpectaDSL.m; path = Specta/Specta/SpectaDSL.m; sourceTree = ""; }; EEF47FCE12FE6BAF3EC7CB54E86434D7 /* NSRegularExpression+Matcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRegularExpression+Matcheable.h"; path = "Nocilla/Matchers/NSRegularExpression+Matcheable.h"; sourceTree = ""; }; - EF85FBA44D56783D225C6A37BF642E1D /* SEGBluetooth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SEGBluetooth.h; sourceTree = ""; }; F0C23C26D420E80AD34DF7B0996B25E8 /* NSValue+Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSValue+Expecta.h"; path = "Expecta/NSValue+Expecta.h"; sourceTree = ""; }; F13E1AE89B0F592308CBD954E0C4FA45 /* LSASIHTTPRequestAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSASIHTTPRequestAdapter.m; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.m; sourceTree = ""; }; + F30FA578EAD204F81712C3A4EC7B1B1E /* SEGSegmentIntegrationFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SEGSegmentIntegrationFactory.m; sourceTree = ""; }; + F48391C7669C37154448ED565B6D9233 /* UIViewController+SEGScreen.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+SEGScreen.m"; sourceTree = ""; }; F4E609243D8AB1B2E70A8F2C5E9F7186 /* EXPMatchers+beLessThan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beLessThan.h"; path = "Expecta/Matchers/EXPMatchers+beLessThan.h"; sourceTree = ""; }; F5268D4F677423311AF279E51E02717D /* SPTSharedExampleGroups.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTSharedExampleGroups.h; path = Specta/Specta/SPTSharedExampleGroups.h; sourceTree = ""; }; F6FCFB90F9A4F2EC5FC71A3E0A0D4D48 /* LSHTTPRequestDiff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPRequestDiff.h; path = Nocilla/Diff/LSHTTPRequestDiff.h; sourceTree = ""; }; @@ -489,6 +488,7 @@ F8843B0B76B48BC52F8BE7AD151C48C7 /* EXPMatchers+match.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+match.m"; path = "Expecta/Matchers/EXPMatchers+match.m"; sourceTree = ""; }; F99FFAD3309B4F39F8BE9FF058F500C0 /* LSASIHTTPRequestAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSASIHTTPRequestAdapter.h; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.h; sourceTree = ""; }; FA0033E115AA6BF02ED6E80505926A94 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FA89F1F324EFFE5F63AF2C9D97775F3F /* UIViewController+SEGScreen.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIViewController+SEGScreen.h"; sourceTree = ""; }; FB8EAF8AD870197091A669E2F17D31C7 /* LSStubResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubResponse.h; path = Nocilla/Stubs/LSStubResponse.h; sourceTree = ""; }; FCB28A78CDBB39AB53186AED8F73F51A /* SPTExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExample.h; path = Specta/Specta/SPTExample.h; sourceTree = ""; }; FE0F7A461D70E6027BC573A58C77C205 /* LSStubResponseDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubResponseDSL.h; path = Nocilla/DSL/LSStubResponseDSL.h; sourceTree = ""; }; @@ -722,7 +722,7 @@ 4B18B8410C6425F24B866CBDB74CABBF /* SEGAnalytics.h */, B0D090B0373B3F51B59F99A087DD9876 /* SEGAnalytics.m */, 0DEF4498594535AD5FA00D8449F00753 /* Integrations */, - 823CD0CAB563A5CA59C9C8BC1F96838D /* Internal */, + A4BAA28124E4EFA8FA82161D8FE5EF80 /* Internal */, ); path = Classes; sourceTree = ""; @@ -795,33 +795,6 @@ ); sourceTree = ""; }; - 823CD0CAB563A5CA59C9C8BC1F96838D /* Internal */ = { - isa = PBXGroup; - children = ( - 4B3FB8815830BA6655399E9878E181BA /* NSData+GZIP.h */, - A97117AD8B3E8115570D2934BF04F744 /* NSData+GZIP.m */, - 93DBFFD1B512B8783254B83EE9779BDF /* SEGAnalyticsUtils.h */, - 8812DF544FCD5304DFEEDFDB93877EA2 /* SEGAnalyticsUtils.m */, - EF85FBA44D56783D225C6A37BF642E1D /* SEGBluetooth.h */, - C04ECE5A1F456FEE55631C245E8069F6 /* SEGBluetooth.m */, - 4B9E5ADCBDC4F69D8EA948FF51B0D0AB /* SEGHTTPClient.h */, - ABD3A8A2E5C2D705B3B2F976221E6748 /* SEGHTTPClient.m */, - EE3D70C67390C71AD4017AC6A272273A /* SEGLocation.h */, - 667F12E8A368666B10A4BD060F0E1FC5 /* SEGLocation.m */, - E99DE7F5F39C8A3CBB2529A0987A93BE /* SEGReachability.h */, - DED7AF9FB2283EBEA906F2E9D6884D10 /* SEGReachability.m */, - 2C3C10DA689CED703B1405801BFD4ED6 /* SEGSegmentIntegration.h */, - 1F504EDCF181E37EA1125AA0272409FE /* SEGSegmentIntegration.m */, - E966D79DA0495B118117BE69BA364056 /* SEGSegmentIntegrationFactory.h */, - 2D65CF2F4ADA2B0AF79D7D23F00EC344 /* SEGSegmentIntegrationFactory.m */, - 1FFBDA242621DB525DC5C434ECEB07D8 /* SEGStoreKitTracker.h */, - D426F3C587A1858E81CF1CF37308E72B /* SEGStoreKitTracker.m */, - 1E33D9C28142DB3C7545C518B07D7F00 /* UIViewController+SEGScreen.h */, - 62325BDEE6F739C800DD201DE7266003 /* UIViewController+SEGScreen.m */, - ); - path = Internal; - sourceTree = ""; - }; 9439D2F0B30AF4FE53082605AEF81C2F /* Pods */ = { isa = PBXGroup; children = ( @@ -840,6 +813,33 @@ path = Analytics; sourceTree = ""; }; + A4BAA28124E4EFA8FA82161D8FE5EF80 /* Internal */ = { + isa = PBXGroup; + children = ( + 6C9F28DF4E74B9F2B225436D9EA58C2E /* NSData+SEGGZIP.h */, + 2BE70A0BE6E3AC40EF4AAC64151CCCDC /* NSData+SEGGZIP.m */, + BC0D48E47A1AC08B1418D2C75C730E90 /* SEGAnalyticsUtils.h */, + 8F06AC9B7CA83F3048A7254B9068F9C8 /* SEGAnalyticsUtils.m */, + CD2F04EA168926D3C54640D6D9BCADBD /* SEGBluetooth.h */, + 1690FDF5CCEF0ABAADCD8708780782D0 /* SEGBluetooth.m */, + 5E186BE69F61E7EDBE62801AE998DC95 /* SEGHTTPClient.h */, + 9161DD85D2FEE10004CF637D901D9070 /* SEGHTTPClient.m */, + 8476918918FBB6405D369344E4D62A04 /* SEGLocation.h */, + 268853C2956555636C6BD6081F8AAE6D /* SEGLocation.m */, + 75341CC2685C2C9FAF02EFAA538C591A /* SEGReachability.h */, + ADF0FC53693A9842E3FB69D92934BA59 /* SEGReachability.m */, + ED69209F90F0AE41E738AC5C92A87F30 /* SEGSegmentIntegration.h */, + 023328B94DE65BA07618E7046973F47E /* SEGSegmentIntegration.m */, + 6F987F4D76DF1691DEDEEE8FE2A4F406 /* SEGSegmentIntegrationFactory.h */, + F30FA578EAD204F81712C3A4EC7B1B1E /* SEGSegmentIntegrationFactory.m */, + EC37B44F5A4A8FE55A6BC47A2FEB8375 /* SEGStoreKitTracker.h */, + CBC1276AA42415EC62FFD14F92757C24 /* SEGStoreKitTracker.m */, + FA89F1F324EFFE5F63AF2C9D97775F3F /* UIViewController+SEGScreen.h */, + F48391C7669C37154448ED565B6D9233 /* UIViewController+SEGScreen.m */, + ); + path = Internal; + sourceTree = ""; + }; B3200B86C84628196CBF2170E3DFB4FF /* Support Files */ = { isa = PBXGroup; children = ( @@ -1094,30 +1094,30 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B0C81D4D0D3192EA28F8D355C447D1C3 /* Headers */ = { + E78E4951543980DDFB68720B1DBE6B67 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - CA40E122B8FECDC1F1A2C37AF14EBA8A /* Analytics-umbrella.h in Headers */, - 79ED2E8199BF13D92950ED89A654B13A /* NSData+GZIP.h in Headers */, - 4BB2FB639E6537B6991B248520ABDD94 /* SEGAliasPayload.h in Headers */, - 4EF43BE713E7E9C7FD0E7AF28532E6D9 /* SEGAnalytics.h in Headers */, - 00CBED9954E20CEAFAB62EBC2C6D1AC2 /* SEGAnalyticsUtils.h in Headers */, - 6F4BD4857B80D7977A32B05ABFDFC79E /* SEGBluetooth.h in Headers */, - B4B9E8A3759D576D35EFEE37A776B6DA /* SEGGroupPayload.h in Headers */, - 556445BCF5C80A0C0E29BAA555C6047A /* SEGHTTPClient.h in Headers */, - DAACBD590DEC0537819A015982A9F0FF /* SEGIdentifyPayload.h in Headers */, - 47E70B3C1FB83EA2A617E5CEA02735B9 /* SEGIntegration.h in Headers */, - C5F3EBC41706031D0941D1D0195A8D39 /* SEGIntegrationFactory.h in Headers */, - 03B1EC3A856CCA8E9363490D1EC67402 /* SEGLocation.h in Headers */, - D9600C057A14F3C9F461FB93E0019955 /* SEGPayload.h in Headers */, - 37BE7CC360317F2CBDFBAEFCE7B39E30 /* SEGReachability.h in Headers */, - 70F84A543FB8DC8063A9630331204B44 /* SEGScreenPayload.h in Headers */, - C2E3AD915C090FFF5AE1DD3586F3BD31 /* SEGSegmentIntegration.h in Headers */, - 6EF70D5FEA5E240C75CF1A94F09A22BD /* SEGSegmentIntegrationFactory.h in Headers */, - 6895E8584D9E5DD9FD807FA66594B619 /* SEGStoreKitTracker.h in Headers */, - 017FA696C155C9139B23611A54C315A9 /* SEGTrackPayload.h in Headers */, - 8A38391C03BADD1855970B67897C4BCD /* UIViewController+SEGScreen.h in Headers */, + E25C82C797039CE89D6F6EF2BBDA1DB1 /* Analytics-umbrella.h in Headers */, + 2DA2EC9D7F9B3A8BC5271F9C9F161AF4 /* NSData+SEGGZIP.h in Headers */, + C1774B2978C825F944AB75401E099018 /* SEGAliasPayload.h in Headers */, + 45E572D31967530C97D396B86E4A8749 /* SEGAnalytics.h in Headers */, + 1CDB65207041EBE85AC82F1C097F88E9 /* SEGAnalyticsUtils.h in Headers */, + FFF7266E53DC64053C3B19DAF238353F /* SEGBluetooth.h in Headers */, + 0AD434F1EE4803CB93B7298DF5704EA8 /* SEGGroupPayload.h in Headers */, + 5B4AC8A357D5257AC7361DFCD16EFC20 /* SEGHTTPClient.h in Headers */, + 63A37D6623A54DB47C2B12D08E02264B /* SEGIdentifyPayload.h in Headers */, + 2A1140DE1AF9BC590ABEC7D33C4AF8D0 /* SEGIntegration.h in Headers */, + 5EE7C2DDFD91350494A3B17E9C8CCAFC /* SEGIntegrationFactory.h in Headers */, + D85A177AB6B05E3FA5D83B4EB90805EE /* SEGLocation.h in Headers */, + 19F252BCEC49E582AC0E1D9D533E47E2 /* SEGPayload.h in Headers */, + 0CEC9AE7F285514B6F72CB302B63DD4F /* SEGReachability.h in Headers */, + 72E2C941E1D6B2686F50ED36658F1BA3 /* SEGScreenPayload.h in Headers */, + 913A727BA58EBFEBCA86115EF0123003 /* SEGSegmentIntegration.h in Headers */, + 2D9B75878287C3650BDDB3C06661E7C8 /* SEGSegmentIntegrationFactory.h in Headers */, + 8897AD5D3DBA96C3D02EC51FC6C4F71F /* SEGStoreKitTracker.h in Headers */, + D0C4EA5695549C1A7A0C509AADDC530E /* SEGTrackPayload.h in Headers */, + 7DE4B7B1DA9C7FF9D2B1B4615A8EB759 /* UIViewController+SEGScreen.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1180,9 +1180,9 @@ isa = PBXNativeTarget; buildConfigurationList = 831D24DD24BCA8DDFDF1F7716DFC19EA /* Build configuration list for PBXNativeTarget "Analytics" */; buildPhases = ( - 3F3FBB0098486D5590D4A98769B5F2A9 /* Sources */, + 64398E3BA262592C10F21DD0046C305C /* Sources */, B6094D4FDD15EED485201D6DE465AFF5 /* Frameworks */, - B0C81D4D0D3192EA28F8D355C447D1C3 /* Headers */, + E78E4951543980DDFB68720B1DBE6B67 /* Headers */, ); buildRules = ( ); @@ -1296,31 +1296,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 3F3FBB0098486D5590D4A98769B5F2A9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8B7BE1676BE19245D2C809BE00F239BA /* Analytics-dummy.m in Sources */, - CDBB6AA64E2CFC2B0B0FB102EBED8127 /* NSData+GZIP.m in Sources */, - 835E821118B7E113219A4FA9637A2876 /* SEGAliasPayload.m in Sources */, - 9E7987C4C41E5C7A8D930B2847A3EF20 /* SEGAnalytics.m in Sources */, - B057CD393503769DBB7FCD6AE4173B66 /* SEGAnalyticsUtils.m in Sources */, - ABF3ECA6CC0D0DB55A283D11FE3F1771 /* SEGBluetooth.m in Sources */, - F0BAD7AF329A8213BAC2E1847FCEA088 /* SEGGroupPayload.m in Sources */, - 100973774AE7C50C13731F5A56EDB0A7 /* SEGHTTPClient.m in Sources */, - 3D760AE20F5B60809247E6328D534A80 /* SEGIdentifyPayload.m in Sources */, - 750E8E7A6E8885E3CAE1F8F7B9B57ADC /* SEGLocation.m in Sources */, - 3E5413E2683109B752875EFE723D2227 /* SEGPayload.m in Sources */, - 7CC8165077CEBED403D0B9996DDCE1E3 /* SEGReachability.m in Sources */, - D9B3D869B64684870A15D16EC496F3A3 /* SEGScreenPayload.m in Sources */, - 937BB86FD6EABBB863B68A0C98160CEE /* SEGSegmentIntegration.m in Sources */, - BA2D2E8C8CCC6DB1CBE95D6C171C3100 /* SEGSegmentIntegrationFactory.m in Sources */, - E87B2BDF61A795AF764D9ACDECB8CDD0 /* SEGStoreKitTracker.m in Sources */, - 3ECFA819FFF561E456D215EB6F2C7A5C /* SEGTrackPayload.m in Sources */, - E4E1E323F67925451C594641D27EAAAB /* UIViewController+SEGScreen.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 5111908BA704400FC15A80EF8AFD7E0F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1354,6 +1329,31 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 64398E3BA262592C10F21DD0046C305C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 53E1FC22599DC2467C1CFA87CF82C705 /* Analytics-dummy.m in Sources */, + BC3752AC356067DF109591107D6BBEE8 /* NSData+SEGGZIP.m in Sources */, + FB525B6CE7C6C882C43F0071B6C4BBD4 /* SEGAliasPayload.m in Sources */, + BEA154ECF7C6ED3CF8C6C0DB54AC77B6 /* SEGAnalytics.m in Sources */, + 34E62597F5978F7A993623739F71601D /* SEGAnalyticsUtils.m in Sources */, + 03818163A522CE759866C29D654F469C /* SEGBluetooth.m in Sources */, + CFF7859C74224C77BC66F32FB7703C7E /* SEGGroupPayload.m in Sources */, + 61F8A44E8A863E6BB75069FB1473C8C3 /* SEGHTTPClient.m in Sources */, + AF484B13886751D179A8B3E58663FD33 /* SEGIdentifyPayload.m in Sources */, + 2E4FF0434401AC1DB9F5DBF38D9287D3 /* SEGLocation.m in Sources */, + D84D38929D245CF5F96890CD985D299C /* SEGPayload.m in Sources */, + 5DFEEE705DFD71AECAB14611FD8C9D93 /* SEGReachability.m in Sources */, + 30E860E40F2D456E532481BF7D54C124 /* SEGScreenPayload.m in Sources */, + D03A170B778B2DDBDBF3B98B9A477CF0 /* SEGSegmentIntegration.m in Sources */, + 3BD06A1A9216438AA513BCFF39EE2F30 /* SEGSegmentIntegrationFactory.m in Sources */, + E5D5F03212E13D03A9A1016C7BC3A541 /* SEGStoreKitTracker.m in Sources */, + D7BCFFA5B563E1FD333EC77D14633DC1 /* SEGTrackPayload.m in Sources */, + 6EC0C9FA543DF6EF0AEC1434823658EB /* UIViewController+SEGScreen.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; B239BD93C67DE976C7F3A1AD982A0A58 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; diff --git a/Example/Pods/Target Support Files/Analytics/Analytics-umbrella.h b/Example/Pods/Target Support Files/Analytics/Analytics-umbrella.h index 6c9637c9c..5aa7e94f2 100644 --- a/Example/Pods/Target Support Files/Analytics/Analytics-umbrella.h +++ b/Example/Pods/Target Support Files/Analytics/Analytics-umbrella.h @@ -8,7 +8,7 @@ #import "SEGPayload.h" #import "SEGScreenPayload.h" #import "SEGTrackPayload.h" -#import "NSData+GZIP.h" +#import "NSData+SEGGZIP.h" #import "SEGAnalyticsUtils.h" #import "SEGBluetooth.h" #import "SEGHTTPClient.h" diff --git a/Example/Tests/SEGHTTPClientTests.m b/Example/Tests/SEGHTTPClientTests.m index a665d4cae..f36a8dcc2 100644 --- a/Example/Tests/SEGHTTPClientTests.m +++ b/Example/Tests/SEGHTTPClientTests.m @@ -1,6 +1,6 @@ #import #import -#import +#import #import SpecBegin(SEGHTTPClient);