diff --git a/Classes/BITAuthenticationViewController.h b/Classes/BITAuthenticationViewController.h index 059e79aa16..465cb82235 100644 --- a/Classes/BITAuthenticationViewController.h +++ b/Classes/BITAuthenticationViewController.h @@ -9,6 +9,7 @@ #import @protocol BITAuthenticationViewControllerDelegate; @class BITAuthenticator; +@class BITHockeyAppClient; @interface BITAuthenticationViewController : UITableViewController @@ -16,6 +17,11 @@ requirePassword:(BOOL) requiresPassword delegate:(id) delegate; +/** + * must be set + */ +@property (nonatomic, strong) BITHockeyAppClient *hockeyAppClient; + /** * The application's id to identifiy it in the backend */ diff --git a/Classes/BITAuthenticationViewController.m b/Classes/BITAuthenticationViewController.m index e7d51f45af..0787a51fa5 100644 --- a/Classes/BITAuthenticationViewController.m +++ b/Classes/BITAuthenticationViewController.m @@ -10,6 +10,7 @@ #import "BITAuthenticator_Private.h" #import "HockeySDKPrivate.h" #import "HockeySDK.h" +#import "BITHockeyAppClient.h" @interface BITAuthenticationViewController () { UIStatusBarStyle _statusBarStyle; @@ -244,41 +245,41 @@ NSDictionary *params = [self parametersForAuthentication]; __weak typeof (self) weakSelf = self; - [self.authenticator postPath:authenticationPath - parameters:params - completion:^(BITHTTPOperation *operation, id response, NSError *error) { - typeof (self) strongSelf = weakSelf; - if(nil == response) { - //TODO think about alertview messages - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil - message:@"Failed to authenticate" - delegate:nil - cancelButtonTitle:BITHockeyLocalizedString(@"OK") - otherButtonTitles:nil]; - [alert show]; - } else if(401 == operation.response.statusCode) { - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil - message:@"Not authorized" - delegate:nil - cancelButtonTitle:BITHockeyLocalizedString(@"OK") - otherButtonTitles:nil]; - [alert show]; - } else { - NSError *authParseError = nil; - NSString *authToken = [strongSelf.class authenticationTokenFromReponse:response - error:&authParseError]; - if(nil == authToken) { + [self.hockeyAppClient postPath:authenticationPath + parameters:params + completion:^(BITHTTPOperation *operation, id response, NSError *error) { + typeof (self) strongSelf = weakSelf; + if(nil == response) { + //TODO think about alertview messages UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"Failed to authenticate" delegate:nil cancelButtonTitle:BITHockeyLocalizedString(@"OK") otherButtonTitles:nil]; [alert show]; + } else if(401 == operation.response.statusCode) { + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil + message:@"Not authorized" + delegate:nil + cancelButtonTitle:BITHockeyLocalizedString(@"OK") + otherButtonTitles:nil]; + [alert show]; } else { - [strongSelf.delegate authenticationViewController:strongSelf authenticatedWithToken:authToken]; + NSError *authParseError = nil; + NSString *authToken = [strongSelf.class authenticationTokenFromReponse:response + error:&authParseError]; + if(nil == authToken) { + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil + message:@"Failed to authenticate" + delegate:nil + cancelButtonTitle:BITHockeyLocalizedString(@"OK") + otherButtonTitles:nil]; + [alert show]; + } else { + [strongSelf.delegate authenticationViewController:strongSelf authenticatedWithToken:authToken]; + } } - } - [self showLoginUI:NO]; + [self showLoginUI:NO]; }]; } diff --git a/Classes/BITAuthenticator.m b/Classes/BITAuthenticator.m index 3ab2948041..f5378ee7cc 100644 --- a/Classes/BITAuthenticator.m +++ b/Classes/BITAuthenticator.m @@ -11,6 +11,7 @@ #import "HockeySDKPrivate.h" #import "BITAuthenticator_Private.h" #import "BITHTTPOperation.h" +#import "BITHockeyAppClient.h" static NSString* const kBITAuthenticatorAuthTokenKey = @"BITAuthenticatorAuthTokenKey"; static NSString* const kBITAuthenticatorLastAuthenticatedVersionKey = @"BITAuthenticatorLastAuthenticatedVersionKey"; @@ -23,7 +24,6 @@ static NSString* const kBITAuthenticatorLastAuthenticatedVersionKey = @"BITAuthe - (void)dealloc { [self unregisterObservers]; - [self cancelOperationsWithPath:nil method:nil]; } - (instancetype) initWithAppIdentifier:(NSString *)appIdentifier isAppStoreEnvironemt:(BOOL)isAppStoreEnvironment { @@ -107,7 +107,7 @@ static NSString* const kBITAuthenticatorLastAuthenticatedVersionKey = @"BITAuthe } else { NSString *validationPath = [NSString stringWithFormat:@"api/3/apps/%@/identity/validate", self.encodedAppIdentifier]; __weak typeof (self) weakSelf = self; - [self getPath:validationPath + [self.hockeyAppClient getPath:validationPath parameters:[self validationParameters] completion:^(BITHTTPOperation *operation, id response, NSError *error) { typeof (self) strongSelf = weakSelf; @@ -376,119 +376,4 @@ static NSString* const kBITAuthenticatorLastAuthenticatedVersionKey = @"BITAuthe }; }; -#pragma mark - Networking -- (NSMutableURLRequest *) requestWithMethod:(NSString*) method - path:(NSString *) path - parameters:(NSDictionary *)params { - NSParameterAssert(self.serverURL); - NSParameterAssert(method); - NSParameterAssert(params == nil || [method isEqualToString:@"POST"] || [method isEqualToString:@"GET"]); - path = path ? : @""; - - NSURL *endpoint = [[NSURL URLWithString:self.serverURL] URLByAppendingPathComponent:path]; - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:endpoint]; - request.HTTPMethod = method; - - if (params) { - if ([method isEqualToString:@"GET"]) { - NSString *absoluteURLString = [endpoint absoluteString]; - //either path already has parameters, or not - NSString *appenderFormat = [path rangeOfString:@"?"].location == NSNotFound ? @"?%@" : @"&%@"; - - endpoint = [NSURL URLWithString:[absoluteURLString stringByAppendingFormat:appenderFormat, - [self.class queryStringFromParameters:params withEncoding:NSUTF8StringEncoding]]]; - [request setURL:endpoint]; - } else { - //TODO: this is crap. Boundary must be the same as the one in appendData - //unify this! - NSString *boundary = @"----FOO"; - NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; - [request setValue:contentType forHTTPHeaderField:@"Content-type"]; - - NSMutableData *postBody = [NSMutableData data]; - [params enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *value, BOOL *stop) { - [postBody appendData:[self appendPostValue:value forKey:key]]; - }]; - - [postBody appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; - - [request setHTTPBody:postBody]; - } - } - - return request; -} - -+ (NSString *) queryStringFromParameters:(NSDictionary *) params withEncoding:(NSStringEncoding) encoding { - NSMutableString *queryString = [NSMutableString new]; - [params enumerateKeysAndObjectsUsingBlock:^(NSString* key, NSString* value, BOOL *stop) { - NSAssert([key isKindOfClass:[NSString class]], @"Query parameters can only be string-string pairs"); - NSAssert([value isKindOfClass:[NSString class]], @"Query parameters can only be string-string pairs"); - - [queryString appendFormat:queryString.length ? @"&%@=%@" : @"%@=%@", key, value]; - }]; - return queryString; -} - -- (BITHTTPOperation*) operationWithURLRequest:(NSURLRequest*) request - completion:(BITNetworkCompletionBlock) completion { - BITHTTPOperation *operation = [BITHTTPOperation operationWithRequest:request - ]; - [operation setCompletion:completion]; - - return operation; -} - -- (void)getPath:(NSString *)path parameters:(NSDictionary *)params completion:(BITNetworkCompletionBlock)completion { - NSURLRequest *request = [self requestWithMethod:@"GET" path:path parameters:params]; - BITHTTPOperation *op = [self operationWithURLRequest:request - completion:completion]; - [self enqeueHTTPOperation:op]; -} - -- (void)postPath:(NSString *)path parameters:(NSDictionary *)params completion:(BITNetworkCompletionBlock)completion { - NSURLRequest *request = [self requestWithMethod:@"POST" path:path parameters:params]; - BITHTTPOperation *op = [self operationWithURLRequest:request - completion:completion]; - [self enqeueHTTPOperation:op]; -} - -- (void) enqeueHTTPOperation:(BITHTTPOperation *) operation { - [self.operationQueue addOperation:operation]; -} - -- (NSUInteger) cancelOperationsWithPath:(NSString*) path - method:(NSString*) method { - NSUInteger cancelledOperations = 0; - for(BITHTTPOperation *operation in self.operationQueue.operations) { - NSURLRequest *request = operation.URLRequest; - - BOOL matchedMethod = YES; - if(method && ![request.HTTPMethod isEqualToString:method]) { - matchedMethod = NO; - } - - BOOL matchedPath = YES; - if(path) { - //method is not interesting here, we' just creating it to get the URL - NSURL *url = [self requestWithMethod:@"GET" path:path parameters:nil].URL; - matchedPath = [request.URL isEqual:url]; - } - - if(matchedPath && matchedMethod) { - ++cancelledOperations; - [operation cancel]; - } - } - return cancelledOperations; -} - -- (NSOperationQueue *)operationQueue { - if(nil == _operationQueue) { - _operationQueue = [[NSOperationQueue alloc] init]; - _operationQueue.maxConcurrentOperationCount = 1; - } - return _operationQueue; -} - @end diff --git a/Classes/BITAuthenticator_Private.h b/Classes/BITAuthenticator_Private.h index 86e31a6930..439b8d670e 100644 --- a/Classes/BITAuthenticator_Private.h +++ b/Classes/BITAuthenticator_Private.h @@ -9,10 +9,15 @@ #import "BITAuthenticator.h" #import "BITHockeyBaseManagerPrivate.h" #import "BITAuthenticationViewController.h" -#import "BITHTTPOperation.h" //needed for typedef +@class BITHockeyAppClient; @interface BITAuthenticator () +/** + * must be set + */ +@property (nonatomic, strong) BITHockeyAppClient *hockeyAppClient; + //can be set for testing @property (nonatomic) UIDevice *currentDevice; @@ -46,72 +51,4 @@ - (void) validationSucceededWithCompletion:(tValidationCompletion) completion; - (void) validationFailedWithError:(NSError *) validationError completion:(tValidationCompletion) completion; - -#pragma mark - Networking helpers (TODO: move to base-class / networking component) -@property (nonatomic, strong) NSOperationQueue *operationQueue; - -/** - * creates an NRURLRequest for the given method and path by using - * the internally stored baseURL. - * - * @param method the HTTPMethod to check, must not be nil - * @param params parameters for the request (only supported for GET and POST for now) - * @param path path to append to baseURL. can be nil in which case "/" is appended - * - * @return an NSMutableURLRequest for further configuration - */ -- (NSMutableURLRequest *) requestWithMethod:(NSString*) method - path:(NSString *) path - parameters:(NSDictionary *) params; -/** - * Creates an operation for the given NSURLRequest - * - * @param request the request that should be handled - * @param completion completionBlock that is called once the operation finished - * - * @return operation, which can be queued via enqueueHTTPOperation: - */ -- (BITHTTPOperation*) operationWithURLRequest:(NSURLRequest*) request - completion:(BITNetworkCompletionBlock) completion; - -/** - * Creates an operation for the given path, and enqueues it - * - * @param path the request path to check - * @param params parameters for the request - * @param completion completionBlock that is called once the operation finished - * - */ -- (void) getPath:(NSString*) path - parameters:(NSDictionary *) params - completion:(BITNetworkCompletionBlock) completion; - -/** - * Creates an operation for the given path, and enqueues it - * - * @param path the request path to check - * @param params parameters for the request - * @param completion completionBlock that is called once the operation finished - * - */ -- (void) postPath:(NSString*) path - parameters:(NSDictionary *) params - completion:(BITNetworkCompletionBlock) completion; -/** - * adds the given operation to the internal queue - * - * @param operation operation to add - */ -- (void) enqeueHTTPOperation:(BITHTTPOperation *) operation; - -/** - * cancels the specified operations - * - * @param path the path which operation should be cancelled. Can be nil to match all - * @param method the method which operations to cancel. Can be nil to match all - * @return number of operations cancelled - */ -- (NSUInteger) cancelOperationsWithPath:(NSString*) path - method:(NSString*) method; - @end diff --git a/Classes/BITFeedbackManager.m b/Classes/BITFeedbackManager.m index d6258d629f..23d827f6b3 100644 --- a/Classes/BITFeedbackManager.m +++ b/Classes/BITFeedbackManager.m @@ -37,7 +37,7 @@ #import "BITHockeyManagerPrivate.h" #import "BITHockeyHelper.h" - +#import "BITHockeyAppClient.h" #define kBITFeedbackUserDataAsked @"HockeyFeedbackUserDataAsked" #define kBITFeedbackDateOfLastCheck @"HockeyFeedbackDateOfLastCheck" @@ -749,27 +749,27 @@ NSMutableData *postBody = [NSMutableData data]; - [postBody appendData:[self appendPostValue:@"Apple" forKey:@"oem"]]; - [postBody appendData:[self appendPostValue:[[UIDevice currentDevice] systemVersion] forKey:@"os_version"]]; - [postBody appendData:[self appendPostValue:[self getDevicePlatform] forKey:@"model"]]; - [postBody appendData:[self appendPostValue:[[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0] forKey:@"lang"]]; - [postBody appendData:[self appendPostValue:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"] forKey:@"bundle_version"]]; - [postBody appendData:[self appendPostValue:[message text] forKey:@"text"]]; - [postBody appendData:[self appendPostValue:[message token] forKey:@"message_token"]]; + [postBody appendData:[BITHockeyAppClient dataWithPostValue:@"Apple" forKey:@"oem" boundary:boundary]]; + [postBody appendData:[BITHockeyAppClient dataWithPostValue:[[UIDevice currentDevice] systemVersion] forKey:@"os_version" boundary:boundary]]; + [postBody appendData:[BITHockeyAppClient dataWithPostValue:[self getDevicePlatform] forKey:@"model" boundary:boundary]]; + [postBody appendData:[BITHockeyAppClient dataWithPostValue:[[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0] forKey:@"lang" boundary:boundary]]; + [postBody appendData:[BITHockeyAppClient dataWithPostValue:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"] forKey:@"bundle_version" boundary:boundary]]; + [postBody appendData:[BITHockeyAppClient dataWithPostValue:[message text] forKey:@"text" boundary:boundary]]; + [postBody appendData:[BITHockeyAppClient dataWithPostValue:[message token] forKey:@"message_token" boundary:boundary]]; NSString *installString = bit_appAnonID(); if (installString) { - [postBody appendData:[self appendPostValue:installString forKey:@"install_string"]]; + [postBody appendData:[BITHockeyAppClient dataWithPostValue:installString forKey:@"install_string" boundary:boundary]]; } if (self.userID) { - [postBody appendData:[self appendPostValue:self.userID forKey:@"user_string"]]; + [postBody appendData:[BITHockeyAppClient dataWithPostValue:self.userID forKey:@"user_string" boundary:boundary]]; } if (self.userName) { - [postBody appendData:[self appendPostValue:self.userName forKey:@"name"]]; + [postBody appendData:[BITHockeyAppClient dataWithPostValue:self.userName forKey:@"name" boundary:boundary]]; } if (self.userEmail) { - [postBody appendData:[self appendPostValue:self.userEmail forKey:@"email"]]; + [postBody appendData:[BITHockeyAppClient dataWithPostValue:self.userEmail forKey:@"email" boundary:boundary]]; } [postBody appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; diff --git a/Classes/BITHockeyAppClient.h b/Classes/BITHockeyAppClient.h new file mode 100644 index 0000000000..1bfad05b2a --- /dev/null +++ b/Classes/BITHockeyAppClient.h @@ -0,0 +1,108 @@ +// +// BITHockeyAppClient.h +// HockeySDK +// +// Created by Stephan Diederich on 06.09.13. +// +// + +#import + +#import "BITHTTPOperation.h" //needed for typedef + +@interface BITHockeyAppClient : NSObject + +/** + * designated initializer + * + * @param baseURL the baseURL of the HockeyApp instance + */ +- (instancetype) initWithBaseURL:(NSURL*) baseURL; + +/** + * baseURL to which relative paths are appended + */ +@property (nonatomic, strong) NSURL *baseURL; + +/** + * creates an NRURLRequest for the given method and path by using + * the internally stored baseURL. + * + * @param method the HTTPMethod to check, must not be nil + * @param params parameters for the request (only supported for GET and POST for now) + * @param path path to append to baseURL. can be nil in which case "/" is appended + * + * @return an NSMutableURLRequest for further configuration + */ +- (NSMutableURLRequest *) requestWithMethod:(NSString*) method + path:(NSString *) path + parameters:(NSDictionary *) params; +/** + * Creates an operation for the given NSURLRequest + * + * @param request the request that should be handled + * @param completion completionBlock that is called once the operation finished + * + * @return operation, which can be queued via enqueueHTTPOperation: + */ +- (BITHTTPOperation*) operationWithURLRequest:(NSURLRequest*) request + completion:(BITNetworkCompletionBlock) completion; + +/** + * Creates an operation for the given path, and enqueues it + * + * @param path the request path to check + * @param params parameters for the request + * @param completion completionBlock that is called once the operation finished + * + */ +- (void) getPath:(NSString*) path + parameters:(NSDictionary *) params + completion:(BITNetworkCompletionBlock) completion; + +/** + * Creates an operation for the given path, and enqueues it + * + * @param path the request path to check + * @param params parameters for the request + * @param completion completionBlock that is called once the operation finished + * + */ +- (void) postPath:(NSString*) path + parameters:(NSDictionary *) params + completion:(BITNetworkCompletionBlock) completion; +/** + * adds the given operation to the internal queue + * + * @param operation operation to add + */ +- (void) enqeueHTTPOperation:(BITHTTPOperation *) operation; + +/** + * cancels the specified operations + * + * @param path the path which operation should be cancelled. Can be nil to match all + * @param method the method which operations to cancel. Can be nil to match all + * @return number of operations cancelled + */ +- (NSUInteger) cancelOperationsWithPath:(NSString*) path + method:(NSString*) method; + +/** + * Access to the internal operation queue + */ +@property (nonatomic, strong) NSOperationQueue *operationQueue; + +#pragma mark - Helpers +/** + * create a post body from the given value, key and boundary + * c/p from HockeyBaseManager + * + * @param value - + * @param key - + * @param boundary - + * + * @return NSData instance configured to be attached on a (post) URLRequest + */ ++ (NSData *)dataWithPostValue:(NSString *)value forKey:(NSString *)key boundary:(NSString *) boundary; +@end diff --git a/Classes/BITHockeyAppClient.m b/Classes/BITHockeyAppClient.m new file mode 100644 index 0000000000..16af6e8ee8 --- /dev/null +++ b/Classes/BITHockeyAppClient.m @@ -0,0 +1,153 @@ +// +// BITHockeyAppClient.m +// HockeySDK +// +// Created by Stephan Diederich on 06.09.13. +// +// + +#import "BITHockeyAppClient.h" + +@implementation BITHockeyAppClient +- (void)dealloc { + [self cancelOperationsWithPath:nil method:nil]; +} + +- (instancetype)initWithBaseURL:(NSURL *)baseURL { + self = [super init]; + if ( self ) { + NSParameterAssert(baseURL); + _baseURL = baseURL; + } + return self; +} + +#pragma mark - Networking +- (NSMutableURLRequest *) requestWithMethod:(NSString*) method + path:(NSString *) path + parameters:(NSDictionary *)params { + NSParameterAssert(self.baseURL); + NSParameterAssert(method); + NSParameterAssert(params == nil || [method isEqualToString:@"POST"] || [method isEqualToString:@"GET"]); + path = path ? : @""; + + NSURL *endpoint = [self.baseURL URLByAppendingPathComponent:path]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:endpoint]; + request.HTTPMethod = method; + + if (params) { + if ([method isEqualToString:@"GET"]) { + NSString *absoluteURLString = [endpoint absoluteString]; + //either path already has parameters, or not + NSString *appenderFormat = [path rangeOfString:@"?"].location == NSNotFound ? @"?%@" : @"&%@"; + + endpoint = [NSURL URLWithString:[absoluteURLString stringByAppendingFormat:appenderFormat, + [self.class queryStringFromParameters:params withEncoding:NSUTF8StringEncoding]]]; + [request setURL:endpoint]; + } else { + //TODO: this is crap. Boundary must be the same as the one in appendData + //unify this! + NSString *boundary = @"----FOO"; + NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; + [request setValue:contentType forHTTPHeaderField:@"Content-type"]; + + NSMutableData *postBody = [NSMutableData data]; + [params enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *value, BOOL *stop) { + [postBody appendData:[[self class] dataWithPostValue:value forKey:key boundary:boundary]]; + }]; + + [postBody appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + + [request setHTTPBody:postBody]; + } + } + + return request; +} + ++ (NSData *)dataWithPostValue:(NSString *)value forKey:(NSString *)key boundary:(NSString *) boundary { + NSMutableData *postBody = [NSMutableData data]; + + [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\";\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[[NSString stringWithFormat:@"Content-Type: text\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[value dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; + + return postBody; +} + + ++ (NSString *) queryStringFromParameters:(NSDictionary *) params withEncoding:(NSStringEncoding) encoding { + NSMutableString *queryString = [NSMutableString new]; + [params enumerateKeysAndObjectsUsingBlock:^(NSString* key, NSString* value, BOOL *stop) { + NSAssert([key isKindOfClass:[NSString class]], @"Query parameters can only be string-string pairs"); + NSAssert([value isKindOfClass:[NSString class]], @"Query parameters can only be string-string pairs"); + + [queryString appendFormat:queryString.length ? @"&%@=%@" : @"%@=%@", key, value]; + }]; + return queryString; +} + +- (BITHTTPOperation*) operationWithURLRequest:(NSURLRequest*) request + completion:(BITNetworkCompletionBlock) completion { + BITHTTPOperation *operation = [BITHTTPOperation operationWithRequest:request + ]; + [operation setCompletion:completion]; + + return operation; +} + +- (void)getPath:(NSString *)path parameters:(NSDictionary *)params completion:(BITNetworkCompletionBlock)completion { + NSURLRequest *request = [self requestWithMethod:@"GET" path:path parameters:params]; + BITHTTPOperation *op = [self operationWithURLRequest:request + completion:completion]; + [self enqeueHTTPOperation:op]; +} + +- (void)postPath:(NSString *)path parameters:(NSDictionary *)params completion:(BITNetworkCompletionBlock)completion { + NSURLRequest *request = [self requestWithMethod:@"POST" path:path parameters:params]; + BITHTTPOperation *op = [self operationWithURLRequest:request + completion:completion]; + [self enqeueHTTPOperation:op]; +} + +- (void) enqeueHTTPOperation:(BITHTTPOperation *) operation { + [self.operationQueue addOperation:operation]; +} + +- (NSUInteger) cancelOperationsWithPath:(NSString*) path + method:(NSString*) method { + NSUInteger cancelledOperations = 0; + for(BITHTTPOperation *operation in self.operationQueue.operations) { + NSURLRequest *request = operation.URLRequest; + + BOOL matchedMethod = YES; + if(method && ![request.HTTPMethod isEqualToString:method]) { + matchedMethod = NO; + } + + BOOL matchedPath = YES; + if(path) { + //method is not interesting here, we' just creating it to get the URL + NSURL *url = [self requestWithMethod:@"GET" path:path parameters:nil].URL; + matchedPath = [request.URL isEqual:url]; + } + + if(matchedPath && matchedMethod) { + ++cancelledOperations; + [operation cancel]; + } + } + return cancelledOperations; +} + +- (NSOperationQueue *)operationQueue { + if(nil == _operationQueue) { + _operationQueue = [[NSOperationQueue alloc] init]; + _operationQueue.maxConcurrentOperationCount = 1; + } + return _operationQueue; +} + +@end diff --git a/Classes/BITHockeyBaseManager.m b/Classes/BITHockeyBaseManager.m index 9b459ca79c..51fc705d2e 100644 --- a/Classes/BITHockeyBaseManager.m +++ b/Classes/BITHockeyBaseManager.m @@ -291,24 +291,6 @@ - (void)startManager { } - -#pragma mark - Networking - -- (NSData *)appendPostValue:(NSString *)value forKey:(NSString *)key { - NSString *boundary = @"----FOO"; - - NSMutableData *postBody = [NSMutableData data]; - - [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\";\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[[NSString stringWithFormat:@"Content-Type: text\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[value dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; - - return postBody; -} - - #pragma mark - Helpers - (NSDate *)parseRFC3339Date:(NSString *)dateString { diff --git a/Classes/BITHockeyBaseManagerPrivate.h b/Classes/BITHockeyBaseManagerPrivate.h index 538e32178f..c925ee9982 100644 --- a/Classes/BITHockeyBaseManagerPrivate.h +++ b/Classes/BITHockeyBaseManagerPrivate.h @@ -49,9 +49,6 @@ - (UIWindow *)findVisibleWindow; - (void)showView:(UIViewController *)viewController; -/** Network helpers */ -- (NSData *)appendPostValue:(NSString *)value forKey:(NSString *)key; - /** Date helpers */ - (NSDate *)parseRFC3339Date:(NSString *)dateString; diff --git a/Classes/BITHockeyManager.m b/Classes/BITHockeyManager.m index aed3a570cb..a01c2fa335 100644 --- a/Classes/BITHockeyManager.m +++ b/Classes/BITHockeyManager.m @@ -36,6 +36,7 @@ #import "BITStoreUpdateManagerPrivate.h" #import "BITFeedbackManagerPrivate.h" #import "BITAuthenticator_Private.h" +#import "BITHockeyAppClient.h" @interface BITHockeyManager () @@ -247,6 +248,7 @@ if (_serverURL != aServerURL) { _serverURL = [aServerURL copy]; + _authenticator.hockeyAppClient.baseURL = [NSURL URLWithString:_serverURL ? _serverURL : BITHOCKEYSDK_URL]; } } @@ -302,7 +304,9 @@ _feedbackManager.delegate = _delegate; BITHockeyLog(@"INFO: Setup Authenticator"); + BITHockeyAppClient *client = [[BITHockeyAppClient alloc] initWithBaseURL:[NSURL URLWithString:_serverURL ? _serverURL : BITHOCKEYSDK_URL]]; _authenticator = [[BITAuthenticator alloc] initWithAppIdentifier:_appIdentifier isAppStoreEnvironemt:_appStoreEnvironment]; + _authenticator.hockeyAppClient = client; _authenticator.delegate = _delegate; #if JIRA_MOBILE_CONNECT_SUPPORT_ENABLED diff --git a/Support/HockeySDK.xcodeproj/project.pbxproj b/Support/HockeySDK.xcodeproj/project.pbxproj index ec840c4164..51e0975a10 100644 --- a/Support/HockeySDK.xcodeproj/project.pbxproj +++ b/Support/HockeySDK.xcodeproj/project.pbxproj @@ -127,6 +127,9 @@ 1EF95CA7162CB037000AE3AD /* BITFeedbackActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EF95CA5162CB036000AE3AD /* BITFeedbackActivity.m */; }; 1EF95CAA162CB314000AE3AD /* BITFeedbackComposeViewControllerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EF95CA9162CB313000AE3AD /* BITFeedbackComposeViewControllerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; E405266217A2AD300096359C /* BITFeedbackManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = E405266117A2AD300096359C /* BITFeedbackManagerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E40E0B0917DA19DC005E38C1 /* BITHockeyAppClientTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E40E0B0817DA19DC005E38C1 /* BITHockeyAppClientTests.m */; }; + E40E0B0C17DA1AFF005E38C1 /* BITHockeyAppClient.h in Headers */ = {isa = PBXBuildFile; fileRef = E40E0B0A17DA1AFF005E38C1 /* BITHockeyAppClient.h */; }; + E40E0B0D17DA1AFF005E38C1 /* BITHockeyAppClient.m in Sources */ = {isa = PBXBuildFile; fileRef = E40E0B0B17DA1AFF005E38C1 /* BITHockeyAppClient.m */; }; E48A3DEC17B3ED1C00924C3D /* BITAuthenticator.h in Headers */ = {isa = PBXBuildFile; fileRef = E48A3DEA17B3ED1C00924C3D /* BITAuthenticator.h */; settings = {ATTRIBUTES = (Public, ); }; }; E48A3DED17B3ED1C00924C3D /* BITAuthenticator.m in Sources */ = {isa = PBXBuildFile; fileRef = E48A3DEB17B3ED1C00924C3D /* BITAuthenticator.m */; }; E48A3DEF17B3EFF100924C3D /* BITAuthenticatorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E48A3DEE17B3EFF100924C3D /* BITAuthenticatorTests.m */; }; @@ -276,6 +279,9 @@ BEE0207C16C5107E004426EA /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/HockeySDK.strings; sourceTree = ""; }; E400561D148D79B500EB22B9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; E405266117A2AD300096359C /* BITFeedbackManagerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackManagerDelegate.h; sourceTree = ""; }; + E40E0B0817DA19DC005E38C1 /* BITHockeyAppClientTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITHockeyAppClientTests.m; sourceTree = ""; }; + E40E0B0A17DA1AFF005E38C1 /* BITHockeyAppClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITHockeyAppClient.h; sourceTree = ""; }; + E40E0B0B17DA1AFF005E38C1 /* BITHockeyAppClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITHockeyAppClient.m; sourceTree = ""; }; E41EB465148D7BF50015DEDC /* BITHockeyManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITHockeyManager.h; sourceTree = ""; }; E41EB466148D7BF50015DEDC /* BITHockeyManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITHockeyManager.m; sourceTree = ""; }; E41EB48B148D7C4E0015DEDC /* CrashReporter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CrashReporter.framework; path = ../Vendor/CrashReporter.framework; sourceTree = ""; }; @@ -356,6 +362,7 @@ 1E5A459716F0DFC200B55C04 /* Supporting Files */, 1E5A459D16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m */, E48A3DEE17B3EFF100924C3D /* BITAuthenticatorTests.m */, + E40E0B0817DA19DC005E38C1 /* BITHockeyAppClientTests.m */, ); path = HockeySDKTests; sourceTree = ""; @@ -558,6 +565,8 @@ E48A3DF017B408D800924C3D /* private */, E48A3DEA17B3ED1C00924C3D /* BITAuthenticator.h */, E48A3DEB17B3ED1C00924C3D /* BITAuthenticator.m */, + E40E0B0A17DA1AFF005E38C1 /* BITHockeyAppClient.h */, + E40E0B0B17DA1AFF005E38C1 /* BITHockeyAppClient.m */, ); name = Network; sourceTree = ""; @@ -593,6 +602,7 @@ 1E49A4481612223B00463151 /* BITFeedbackListViewController.h in Headers */, 1E49A47F1612226D00463151 /* BITUpdateViewController.h in Headers */, 1E49A43C1612223B00463151 /* BITFeedbackComposeViewController.h in Headers */, + E40E0B0C17DA1AFF005E38C1 /* BITHockeyAppClient.h in Headers */, 1EF95CAA162CB314000AE3AD /* BITFeedbackComposeViewControllerDelegate.h in Headers */, 1EF95CA6162CB037000AE3AD /* BITFeedbackActivity.h in Headers */, 1E49A4AF161222B900463151 /* BITHockeyBaseManager.h in Headers */, @@ -817,6 +827,7 @@ files = ( 1E5954D315B6F24A00A03429 /* BITHockeyManager.m in Sources */, 1E49A43F1612223B00463151 /* BITFeedbackComposeViewController.m in Sources */, + E40E0B0D17DA1AFF005E38C1 /* BITHockeyAppClient.m in Sources */, 1E49A4451612223B00463151 /* BITFeedbackListViewCell.m in Sources */, 1E49A44B1612223B00463151 /* BITFeedbackListViewController.m in Sources */, 1E49A4511612223B00463151 /* BITFeedbackManager.m in Sources */, @@ -856,6 +867,7 @@ buildActionMask = 2147483647; files = ( 1E5A459E16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m in Sources */, + E40E0B0917DA19DC005E38C1 /* BITHockeyAppClientTests.m in Sources */, E48A3DEF17B3EFF100924C3D /* BITAuthenticatorTests.m in Sources */, 1EA1170716F53B91001C015C /* BITTestHelper.m in Sources */, ); diff --git a/Support/HockeySDK.xcodeproj/project.pbxproj.orig b/Support/HockeySDK.xcodeproj/project.pbxproj.orig new file mode 100644 index 0000000000..cee7a511fa --- /dev/null +++ b/Support/HockeySDK.xcodeproj/project.pbxproj.orig @@ -0,0 +1,1319 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXAggregateTarget section */ + 1E4F61E91621AD970033EFC5 /* HockeySDK Framework */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 1E4F61EA1621AD970033EFC5 /* Build configuration list for PBXAggregateTarget "HockeySDK Framework" */; + buildPhases = ( + 1E4F61ED1621ADE70033EFC5 /* Build universal embedded framework */, + ); + dependencies = ( + 1E754E431621F6290070AB92 /* PBXTargetDependency */, + ); + name = "HockeySDK Framework"; + productName = "HockeySDK Framework"; + }; + 1E8E66AD15BC3D7700632A2E /* HockeySDK Documentation */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 1E8E66B015BC3D7700632A2E /* Build configuration list for PBXAggregateTarget "HockeySDK Documentation" */; + buildPhases = ( + 1E8E66B215BC3D8200632A2E /* ShellScript */, + ); + dependencies = ( + ); + name = "HockeySDK Documentation"; + productName = Documentation; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 1E0829001708F69A0073050E /* BITStoreUpdateManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E0828FF1708F69A0073050E /* BITStoreUpdateManagerDelegate.h */; }; + 1E0FEE28173BDB260061331F /* BITKeychainUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E0FEE26173BDB260061331F /* BITKeychainUtils.h */; }; + 1E0FEE29173BDB260061331F /* BITKeychainUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E0FEE27173BDB260061331F /* BITKeychainUtils.m */; }; + 1E1127C416580C87007067A2 /* buttonRoundedDelete.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E1127BC16580C87007067A2 /* buttonRoundedDelete.png */; }; + 1E1127C516580C87007067A2 /* buttonRoundedDelete@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E1127BD16580C87007067A2 /* buttonRoundedDelete@2x.png */; }; + 1E1127C616580C87007067A2 /* buttonRoundedDeleteHighlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E1127BE16580C87007067A2 /* buttonRoundedDeleteHighlighted.png */; }; + 1E1127C716580C87007067A2 /* buttonRoundedDeleteHighlighted@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E1127BF16580C87007067A2 /* buttonRoundedDeleteHighlighted@2x.png */; }; + 1E1127C816580C87007067A2 /* buttonRoundedRegular.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E1127C016580C87007067A2 /* buttonRoundedRegular.png */; }; + 1E1127C916580C87007067A2 /* buttonRoundedRegular@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E1127C116580C87007067A2 /* buttonRoundedRegular@2x.png */; }; + 1E1127CA16580C87007067A2 /* buttonRoundedRegularHighlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E1127C216580C87007067A2 /* buttonRoundedRegularHighlighted.png */; }; + 1E1127CB16580C87007067A2 /* buttonRoundedRegularHighlighted@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E1127C316580C87007067A2 /* buttonRoundedRegularHighlighted@2x.png */; }; + 1E49A43C1612223B00463151 /* BITFeedbackComposeViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A42D1612223B00463151 /* BITFeedbackComposeViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E49A43F1612223B00463151 /* BITFeedbackComposeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A42E1612223B00463151 /* BITFeedbackComposeViewController.m */; }; + 1E49A4421612223B00463151 /* BITFeedbackListViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A42F1612223B00463151 /* BITFeedbackListViewCell.h */; }; + 1E49A4451612223B00463151 /* BITFeedbackListViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4301612223B00463151 /* BITFeedbackListViewCell.m */; }; + 1E49A4481612223B00463151 /* BITFeedbackListViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4311612223B00463151 /* BITFeedbackListViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E49A44B1612223B00463151 /* BITFeedbackListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4321612223B00463151 /* BITFeedbackListViewController.m */; }; + 1E49A44E1612223B00463151 /* BITFeedbackManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4331612223B00463151 /* BITFeedbackManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E49A4511612223B00463151 /* BITFeedbackManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4341612223B00463151 /* BITFeedbackManager.m */; }; + 1E49A4541612223B00463151 /* BITFeedbackManagerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4351612223B00463151 /* BITFeedbackManagerPrivate.h */; }; + 1E49A4571612223B00463151 /* BITFeedbackMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4361612223B00463151 /* BITFeedbackMessage.h */; }; + 1E49A45A1612223B00463151 /* BITFeedbackMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4371612223B00463151 /* BITFeedbackMessage.m */; }; + 1E49A45D1612223B00463151 /* BITFeedbackUserDataViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4381612223B00463151 /* BITFeedbackUserDataViewController.h */; }; + 1E49A4601612223B00463151 /* BITFeedbackUserDataViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4391612223B00463151 /* BITFeedbackUserDataViewController.m */; }; + 1E49A46D1612226D00463151 /* BITAppVersionMetaInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4621612226D00463151 /* BITAppVersionMetaInfo.h */; }; + 1E49A4701612226D00463151 /* BITAppVersionMetaInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4631612226D00463151 /* BITAppVersionMetaInfo.m */; }; + 1E49A4731612226D00463151 /* BITUpdateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4641612226D00463151 /* BITUpdateManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E49A4761612226D00463151 /* BITUpdateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4651612226D00463151 /* BITUpdateManager.m */; }; + 1E49A4791612226D00463151 /* BITUpdateManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4661612226D00463151 /* BITUpdateManagerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E49A47C1612226D00463151 /* BITUpdateManagerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4671612226D00463151 /* BITUpdateManagerPrivate.h */; }; + 1E49A47F1612226D00463151 /* BITUpdateViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4681612226D00463151 /* BITUpdateViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E49A4821612226D00463151 /* BITUpdateViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4691612226D00463151 /* BITUpdateViewController.m */; }; + 1E49A4851612226D00463151 /* BITUpdateViewControllerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A46A1612226D00463151 /* BITUpdateViewControllerPrivate.h */; }; + 1E49A4AF161222B900463151 /* BITHockeyBaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4A0161222B900463151 /* BITHockeyBaseManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E49A4B2161222B900463151 /* BITHockeyBaseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4A1161222B900463151 /* BITHockeyBaseManager.m */; }; + 1E49A4B5161222B900463151 /* BITHockeyBaseManagerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4A2161222B900463151 /* BITHockeyBaseManagerPrivate.h */; }; + 1E49A4B8161222B900463151 /* BITHockeyBaseViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4A3161222B900463151 /* BITHockeyBaseViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E49A4BB161222B900463151 /* BITHockeyBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4A4161222B900463151 /* BITHockeyBaseViewController.m */; }; + 1E49A4BE161222B900463151 /* BITHockeyHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4A5161222B900463151 /* BITHockeyHelper.h */; }; + 1E49A4C1161222B900463151 /* BITHockeyHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4A6161222B900463151 /* BITHockeyHelper.m */; }; + 1E49A4C4161222B900463151 /* BITAppStoreHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4A7161222B900463151 /* BITAppStoreHeader.h */; }; + 1E49A4C7161222B900463151 /* BITAppStoreHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4A8161222B900463151 /* BITAppStoreHeader.m */; }; + 1E49A4CA161222B900463151 /* BITStoreButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4A9161222B900463151 /* BITStoreButton.h */; }; + 1E49A4CD161222B900463151 /* BITStoreButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4AA161222B900463151 /* BITStoreButton.m */; }; + 1E49A4D0161222B900463151 /* BITWebTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4AB161222B900463151 /* BITWebTableViewCell.h */; }; + 1E49A4D3161222B900463151 /* BITWebTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4AC161222B900463151 /* BITWebTableViewCell.m */; }; + 1E49A4D8161222D400463151 /* HockeySDKPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E49A4D4161222D400463151 /* HockeySDKPrivate.h */; }; + 1E49A4DB161222D400463151 /* HockeySDKPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E49A4D5161222D400463151 /* HockeySDKPrivate.m */; }; + 1E5954D315B6F24A00A03429 /* BITHockeyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E41EB466148D7BF50015DEDC /* BITHockeyManager.m */; }; + 1E5954DC15B6F24A00A03429 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E400561D148D79B500EB22B9 /* Foundation.framework */; }; + 1E5954DD15B6F24A00A03429 /* CrashReporter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E41EB48B148D7C4E0015DEDC /* CrashReporter.framework */; }; + 1E59559A15B6FDA500A03429 /* BITHockeyManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E41EB465148D7BF50015DEDC /* BITHockeyManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E59559B15B6FDA500A03429 /* HockeySDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E71509A15B5C76F004E88FF /* HockeySDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E5955C615B71C8600A03429 /* authorize_denied.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E5955BB15B71C8600A03429 /* authorize_denied.png */; }; + 1E5955C715B71C8600A03429 /* authorize_denied@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E5955BC15B71C8600A03429 /* authorize_denied@2x.png */; }; + 1E5955CA15B71C8600A03429 /* bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E5955BF15B71C8600A03429 /* bg.png */; }; + 1E5955CB15B71C8600A03429 /* buttonHighlight.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E5955C015B71C8600A03429 /* buttonHighlight.png */; }; + 1E5955CC15B71C8600A03429 /* buttonHighlight@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E5955C115B71C8600A03429 /* buttonHighlight@2x.png */; }; + 1E5955CF15B71C8600A03429 /* IconGradient.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E5955C415B71C8600A03429 /* IconGradient.png */; }; + 1E5955D015B71C8600A03429 /* IconGradient@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E5955C515B71C8600A03429 /* IconGradient@2x.png */; }; + 1E5955FD15B7877B00A03429 /* BITHockeyManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E5955FA15B7877A00A03429 /* BITHockeyManagerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E5A459216F0DFC200B55C04 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E5A459116F0DFC200B55C04 /* SenTestingKit.framework */; }; + 1E5A459416F0DFC200B55C04 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E5A459316F0DFC200B55C04 /* UIKit.framework */; }; + 1E5A459516F0DFC200B55C04 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E400561D148D79B500EB22B9 /* Foundation.framework */; }; + 1E5A459B16F0DFC200B55C04 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1E5A459916F0DFC200B55C04 /* InfoPlist.strings */; }; + 1E5A459E16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E5A459D16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m */; }; + 1E754E5C1621FBB70070AB92 /* BITCrashManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E754E561621FBB70070AB92 /* BITCrashManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E754E5D1621FBB70070AB92 /* BITCrashManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E754E571621FBB70070AB92 /* BITCrashManager.m */; }; + 1E754E5E1621FBB70070AB92 /* BITCrashManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E754E581621FBB70070AB92 /* BITCrashManagerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E754E601621FBB70070AB92 /* BITCrashReportTextFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E754E5A1621FBB70070AB92 /* BITCrashReportTextFormatter.h */; }; + 1E754E611621FBB70070AB92 /* BITCrashReportTextFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E754E5B1621FBB70070AB92 /* BITCrashReportTextFormatter.m */; }; + 1E7A45FC16F54FB5005B08F1 /* OCHamcrestIOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E7A45FA16F54FB5005B08F1 /* OCHamcrestIOS.framework */; }; + 1E7A45FD16F54FB5005B08F1 /* OCMockitoIOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E7A45FB16F54FB5005B08F1 /* OCMockitoIOS.framework */; }; + 1E94F9E116E91330006570AD /* BITStoreUpdateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E94F9DF16E91330006570AD /* BITStoreUpdateManager.h */; }; + 1E94F9E216E91330006570AD /* BITStoreUpdateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E94F9E016E91330006570AD /* BITStoreUpdateManager.m */; }; + 1E94F9E416E9136B006570AD /* BITStoreUpdateManagerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E94F9E316E9136B006570AD /* BITStoreUpdateManagerPrivate.h */; }; + 1EA1170016F4D32C001C015C /* libHockeySDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E5954F215B6F24A00A03429 /* libHockeySDK.a */; }; + 1EA1170116F4D354001C015C /* CrashReporter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E41EB48B148D7C4E0015DEDC /* CrashReporter.framework */; }; + 1EA1170416F53B49001C015C /* StoreBundleIdentifierUnknown.json in Resources */ = {isa = PBXBuildFile; fileRef = 1EA1170316F53B49001C015C /* StoreBundleIdentifierUnknown.json */; }; + 1EA1170716F53B91001C015C /* BITTestHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EA1170616F53B91001C015C /* BITTestHelper.m */; }; + 1EA1170916F53E3A001C015C /* StoreBundleIdentifierKnown.json in Resources */ = {isa = PBXBuildFile; fileRef = 1EA1170816F53E3A001C015C /* StoreBundleIdentifierKnown.json */; }; + 1EA1170C16F54A64001C015C /* HockeySDKResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 1E59550A15B6F45800A03429 /* HockeySDKResources.bundle */; }; + 1EACC97B162F041E007578C5 /* BITAttributedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EACC979162F041E007578C5 /* BITAttributedLabel.h */; }; + 1EACC97C162F041E007578C5 /* BITAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EACC97A162F041E007578C5 /* BITAttributedLabel.m */; }; + 1EAF20A8162DC0F600957B1D /* feedbackActivity@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 1EAF20A4162DC0F600957B1D /* feedbackActivity@2x~ipad.png */; }; + 1EAF20A9162DC0F600957B1D /* feedbackActivity~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 1EAF20A5162DC0F600957B1D /* feedbackActivity~ipad.png */; }; + 1EAF20AA162DC0F600957B1D /* feedbackActiviy.png in Resources */ = {isa = PBXBuildFile; fileRef = 1EAF20A6162DC0F600957B1D /* feedbackActiviy.png */; }; + 1EAF20AB162DC0F600957B1D /* feedbackActiviy@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1EAF20A7162DC0F600957B1D /* feedbackActiviy@2x.png */; }; + 1EB52FD5167B766100C801D5 /* HockeySDK.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1E59555F15B6F80E00A03429 /* HockeySDK.strings */; }; + 1EC69F601615001500808FD9 /* BITHockeyManagerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EC69F5D1615001500808FD9 /* BITHockeyManagerPrivate.h */; }; + 1EF95CA6162CB037000AE3AD /* BITFeedbackActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EF95CA4162CB036000AE3AD /* BITFeedbackActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1EF95CA7162CB037000AE3AD /* BITFeedbackActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EF95CA5162CB036000AE3AD /* BITFeedbackActivity.m */; }; + 1EF95CAA162CB314000AE3AD /* BITFeedbackComposeViewControllerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EF95CA9162CB313000AE3AD /* BITFeedbackComposeViewControllerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E405266217A2AD300096359C /* BITFeedbackManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = E405266117A2AD300096359C /* BITFeedbackManagerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E48A3DEC17B3ED1C00924C3D /* BITAuthenticator.h in Headers */ = {isa = PBXBuildFile; fileRef = E48A3DEA17B3ED1C00924C3D /* BITAuthenticator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E48A3DED17B3ED1C00924C3D /* BITAuthenticator.m in Sources */ = {isa = PBXBuildFile; fileRef = E48A3DEB17B3ED1C00924C3D /* BITAuthenticator.m */; }; + E48A3DEF17B3EFF100924C3D /* BITAuthenticatorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E48A3DEE17B3EFF100924C3D /* BITAuthenticatorTests.m */; }; + E4933E8017B66CDA00B11ACC /* BITHTTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = E4933E7E17B66CDA00B11ACC /* BITHTTPOperation.h */; }; + E4933E8117B66CDA00B11ACC /* BITHTTPOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E4933E7F17B66CDA00B11ACC /* BITHTTPOperation.m */; }; + E4B4DB7D17B435550099C67F /* BITAuthenticationViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B4DB7B17B435550099C67F /* BITAuthenticationViewController.h */; }; + E4B4DB7E17B435550099C67F /* BITAuthenticationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E4B4DB7C17B435550099C67F /* BITAuthenticationViewController.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 1E59557D15B6F97100A03429 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4005611148D79B500EB22B9 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1E59550915B6F45800A03429; + remoteInfo = HockeySDKResources; + }; + 1E754E421621F6290070AB92 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4005611148D79B500EB22B9 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1E8E66AD15BC3D7700632A2E; + remoteInfo = "HockeySDK Documentation"; + }; + 1EA116FE16F4D302001C015C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4005611148D79B500EB22B9 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1E5954CB15B6F24A00A03429; + remoteInfo = HockeySDK; + }; + 1EA1170A16F54A5C001C015C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4005611148D79B500EB22B9 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1E59550915B6F45800A03429; + remoteInfo = HockeySDKResources; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 1E0828FF1708F69A0073050E /* BITStoreUpdateManagerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITStoreUpdateManagerDelegate.h; sourceTree = ""; }; + 1E0FEE26173BDB260061331F /* BITKeychainUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITKeychainUtils.h; sourceTree = ""; }; + 1E0FEE27173BDB260061331F /* BITKeychainUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITKeychainUtils.m; sourceTree = ""; }; + 1E1127BC16580C87007067A2 /* buttonRoundedDelete.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = buttonRoundedDelete.png; sourceTree = ""; }; + 1E1127BD16580C87007067A2 /* buttonRoundedDelete@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "buttonRoundedDelete@2x.png"; sourceTree = ""; }; + 1E1127BE16580C87007067A2 /* buttonRoundedDeleteHighlighted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = buttonRoundedDeleteHighlighted.png; sourceTree = ""; }; + 1E1127BF16580C87007067A2 /* buttonRoundedDeleteHighlighted@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "buttonRoundedDeleteHighlighted@2x.png"; sourceTree = ""; }; + 1E1127C016580C87007067A2 /* buttonRoundedRegular.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = buttonRoundedRegular.png; sourceTree = ""; }; + 1E1127C116580C87007067A2 /* buttonRoundedRegular@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "buttonRoundedRegular@2x.png"; sourceTree = ""; }; + 1E1127C216580C87007067A2 /* buttonRoundedRegularHighlighted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = buttonRoundedRegularHighlighted.png; sourceTree = ""; }; + 1E1127C316580C87007067A2 /* buttonRoundedRegularHighlighted@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "buttonRoundedRegularHighlighted@2x.png"; sourceTree = ""; }; + 1E36D8B816667611000B134C /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/HockeySDK.strings; sourceTree = ""; }; + 1E49A42D1612223B00463151 /* BITFeedbackComposeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackComposeViewController.h; sourceTree = ""; }; + 1E49A42E1612223B00463151 /* BITFeedbackComposeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITFeedbackComposeViewController.m; sourceTree = ""; }; + 1E49A42F1612223B00463151 /* BITFeedbackListViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackListViewCell.h; sourceTree = ""; }; + 1E49A4301612223B00463151 /* BITFeedbackListViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITFeedbackListViewCell.m; sourceTree = ""; }; + 1E49A4311612223B00463151 /* BITFeedbackListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackListViewController.h; sourceTree = ""; }; + 1E49A4321612223B00463151 /* BITFeedbackListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITFeedbackListViewController.m; sourceTree = ""; }; + 1E49A4331612223B00463151 /* BITFeedbackManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackManager.h; sourceTree = ""; }; + 1E49A4341612223B00463151 /* BITFeedbackManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITFeedbackManager.m; sourceTree = ""; }; + 1E49A4351612223B00463151 /* BITFeedbackManagerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackManagerPrivate.h; sourceTree = ""; }; + 1E49A4361612223B00463151 /* BITFeedbackMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackMessage.h; sourceTree = ""; }; + 1E49A4371612223B00463151 /* BITFeedbackMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITFeedbackMessage.m; sourceTree = ""; }; + 1E49A4381612223B00463151 /* BITFeedbackUserDataViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackUserDataViewController.h; sourceTree = ""; }; + 1E49A4391612223B00463151 /* BITFeedbackUserDataViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITFeedbackUserDataViewController.m; sourceTree = ""; }; + 1E49A4621612226D00463151 /* BITAppVersionMetaInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITAppVersionMetaInfo.h; sourceTree = ""; }; + 1E49A4631612226D00463151 /* BITAppVersionMetaInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITAppVersionMetaInfo.m; sourceTree = ""; }; + 1E49A4641612226D00463151 /* BITUpdateManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITUpdateManager.h; sourceTree = ""; }; + 1E49A4651612226D00463151 /* BITUpdateManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITUpdateManager.m; sourceTree = ""; }; + 1E49A4661612226D00463151 /* BITUpdateManagerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITUpdateManagerDelegate.h; sourceTree = ""; }; + 1E49A4671612226D00463151 /* BITUpdateManagerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITUpdateManagerPrivate.h; sourceTree = ""; }; + 1E49A4681612226D00463151 /* BITUpdateViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITUpdateViewController.h; sourceTree = ""; }; + 1E49A4691612226D00463151 /* BITUpdateViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITUpdateViewController.m; sourceTree = ""; }; + 1E49A46A1612226D00463151 /* BITUpdateViewControllerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITUpdateViewControllerPrivate.h; sourceTree = ""; }; + 1E49A4A0161222B900463151 /* BITHockeyBaseManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITHockeyBaseManager.h; sourceTree = ""; }; + 1E49A4A1161222B900463151 /* BITHockeyBaseManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITHockeyBaseManager.m; sourceTree = ""; }; + 1E49A4A2161222B900463151 /* BITHockeyBaseManagerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITHockeyBaseManagerPrivate.h; sourceTree = ""; }; + 1E49A4A3161222B900463151 /* BITHockeyBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITHockeyBaseViewController.h; sourceTree = ""; }; + 1E49A4A4161222B900463151 /* BITHockeyBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITHockeyBaseViewController.m; sourceTree = ""; }; + 1E49A4A5161222B900463151 /* BITHockeyHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITHockeyHelper.h; sourceTree = ""; }; + 1E49A4A6161222B900463151 /* BITHockeyHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITHockeyHelper.m; sourceTree = ""; }; + 1E49A4A7161222B900463151 /* BITAppStoreHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITAppStoreHeader.h; sourceTree = ""; }; + 1E49A4A8161222B900463151 /* BITAppStoreHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITAppStoreHeader.m; sourceTree = ""; }; + 1E49A4A9161222B900463151 /* BITStoreButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITStoreButton.h; sourceTree = ""; }; + 1E49A4AA161222B900463151 /* BITStoreButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITStoreButton.m; sourceTree = ""; }; + 1E49A4AB161222B900463151 /* BITWebTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITWebTableViewCell.h; sourceTree = ""; }; + 1E49A4AC161222B900463151 /* BITWebTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITWebTableViewCell.m; sourceTree = ""; }; + 1E49A4D4161222D400463151 /* HockeySDKPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HockeySDKPrivate.h; sourceTree = ""; }; + 1E49A4D5161222D400463151 /* HockeySDKPrivate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HockeySDKPrivate.m; sourceTree = ""; }; + 1E5954F215B6F24A00A03429 /* libHockeySDK.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libHockeySDK.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 1E59550A15B6F45800A03429 /* HockeySDKResources.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HockeySDKResources.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 1E59556015B6F80E00A03429 /* de */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/HockeySDK.strings; sourceTree = ""; }; + 1E59556415B6F81C00A03429 /* es */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/HockeySDK.strings; sourceTree = ""; }; + 1E59556615B6F82300A03429 /* fr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/HockeySDK.strings; sourceTree = ""; }; + 1E59556815B6F82A00A03429 /* it */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/HockeySDK.strings; sourceTree = ""; }; + 1E59556A15B6F83100A03429 /* ja */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/HockeySDK.strings; sourceTree = ""; }; + 1E59557015B6F84700A03429 /* pt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/HockeySDK.strings; sourceTree = ""; }; + 1E59557215B6F84D00A03429 /* ru */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/HockeySDK.strings; sourceTree = ""; }; + 1E5955BB15B71C8600A03429 /* authorize_denied.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = authorize_denied.png; sourceTree = ""; }; + 1E5955BC15B71C8600A03429 /* authorize_denied@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "authorize_denied@2x.png"; sourceTree = ""; }; + 1E5955BF15B71C8600A03429 /* bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = bg.png; sourceTree = ""; }; + 1E5955C015B71C8600A03429 /* buttonHighlight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = buttonHighlight.png; sourceTree = ""; }; + 1E5955C115B71C8600A03429 /* buttonHighlight@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "buttonHighlight@2x.png"; sourceTree = ""; }; + 1E5955C415B71C8600A03429 /* IconGradient.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = IconGradient.png; sourceTree = ""; }; + 1E5955C515B71C8600A03429 /* IconGradient@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "IconGradient@2x.png"; sourceTree = ""; }; + 1E5955FA15B7877A00A03429 /* BITHockeyManagerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITHockeyManagerDelegate.h; sourceTree = ""; }; + 1E5A459016F0DFC200B55C04 /* HockeySDKTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HockeySDKTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + 1E5A459116F0DFC200B55C04 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; + 1E5A459316F0DFC200B55C04 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 1E5A459816F0DFC200B55C04 /* HockeySDKTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "HockeySDKTests-Info.plist"; sourceTree = ""; }; + 1E5A459A16F0DFC200B55C04 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 1E5A459D16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BITStoreUpdateManagerTests.m; sourceTree = ""; }; + 1E5A459F16F0DFC200B55C04 /* HockeySDKTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "HockeySDKTests-Prefix.pch"; sourceTree = ""; }; + 1E66CA9115D4100500F35BED /* buildnumber.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = buildnumber.xcconfig; sourceTree = ""; }; + 1E6DDCEE169E290C0076C65D /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/HockeySDK.strings; sourceTree = ""; }; + 1E6F0450167B5E5600ED1C86 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/HockeySDK.strings"; sourceTree = ""; }; + 1E71509A15B5C76F004E88FF /* HockeySDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HockeySDK.h; sourceTree = ""; }; + 1E754DC61621BC170070AB92 /* HockeySDK.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = HockeySDK.xcconfig; sourceTree = ""; }; + 1E754E561621FBB70070AB92 /* BITCrashManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITCrashManager.h; sourceTree = ""; }; + 1E754E571621FBB70070AB92 /* BITCrashManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITCrashManager.m; sourceTree = ""; }; + 1E754E581621FBB70070AB92 /* BITCrashManagerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITCrashManagerDelegate.h; sourceTree = ""; }; + 1E754E5A1621FBB70070AB92 /* BITCrashReportTextFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITCrashReportTextFormatter.h; sourceTree = ""; }; + 1E754E5B1621FBB70070AB92 /* BITCrashReportTextFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITCrashReportTextFormatter.m; sourceTree = ""; }; + 1E7A45FA16F54FB5005B08F1 /* OCHamcrestIOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = OCHamcrestIOS.framework; sourceTree = ""; }; + 1E7A45FB16F54FB5005B08F1 /* OCMockitoIOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = OCMockitoIOS.framework; sourceTree = ""; }; + 1E94F9DF16E91330006570AD /* BITStoreUpdateManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITStoreUpdateManager.h; sourceTree = ""; }; + 1E94F9E016E91330006570AD /* BITStoreUpdateManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITStoreUpdateManager.m; sourceTree = ""; }; + 1E94F9E316E9136B006570AD /* BITStoreUpdateManagerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITStoreUpdateManagerPrivate.h; sourceTree = ""; }; + 1EA1170316F53B49001C015C /* StoreBundleIdentifierUnknown.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = StoreBundleIdentifierUnknown.json; sourceTree = ""; }; + 1EA1170516F53B91001C015C /* BITTestHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITTestHelper.h; sourceTree = ""; }; + 1EA1170616F53B91001C015C /* BITTestHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITTestHelper.m; sourceTree = ""; }; + 1EA1170816F53E3A001C015C /* StoreBundleIdentifierKnown.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = StoreBundleIdentifierKnown.json; sourceTree = ""; }; + 1EA512DF167F7EF000FC9FBA /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/HockeySDK.strings"; sourceTree = ""; }; + 1EACC979162F041E007578C5 /* BITAttributedLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITAttributedLabel.h; sourceTree = ""; }; + 1EACC97A162F041E007578C5 /* BITAttributedLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = BITAttributedLabel.m; sourceTree = ""; }; + 1EAF20A4162DC0F600957B1D /* feedbackActivity@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "feedbackActivity@2x~ipad.png"; sourceTree = ""; }; + 1EAF20A5162DC0F600957B1D /* feedbackActivity~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "feedbackActivity~ipad.png"; sourceTree = ""; }; + 1EAF20A6162DC0F600957B1D /* feedbackActiviy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = feedbackActiviy.png; sourceTree = ""; }; + 1EAF20A7162DC0F600957B1D /* feedbackActiviy@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "feedbackActiviy@2x.png"; sourceTree = ""; }; + 1EB52FC3167B73D400C801D5 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/HockeySDK.strings; sourceTree = ""; }; + 1EC69F5D1615001500808FD9 /* BITHockeyManagerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITHockeyManagerPrivate.h; sourceTree = ""; }; + 1EDA60CF15C2C1450032D10B /* HockeySDK-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "HockeySDK-Info.plist"; sourceTree = ""; }; + 1EF95CA4162CB036000AE3AD /* BITFeedbackActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackActivity.h; sourceTree = ""; }; + 1EF95CA5162CB036000AE3AD /* BITFeedbackActivity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITFeedbackActivity.m; sourceTree = ""; }; + 1EF95CA9162CB313000AE3AD /* BITFeedbackComposeViewControllerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackComposeViewControllerDelegate.h; sourceTree = ""; }; + BEE0207C16C5107E004426EA /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/HockeySDK.strings; sourceTree = ""; }; + E400561D148D79B500EB22B9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + E405266117A2AD300096359C /* BITFeedbackManagerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackManagerDelegate.h; sourceTree = ""; }; + E41EB465148D7BF50015DEDC /* BITHockeyManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITHockeyManager.h; sourceTree = ""; }; + E41EB466148D7BF50015DEDC /* BITHockeyManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITHockeyManager.m; sourceTree = ""; }; + E41EB48B148D7C4E0015DEDC /* CrashReporter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CrashReporter.framework; path = ../Vendor/CrashReporter.framework; sourceTree = ""; }; + E48A3DEA17B3ED1C00924C3D /* BITAuthenticator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITAuthenticator.h; sourceTree = ""; }; + E48A3DEB17B3ED1C00924C3D /* BITAuthenticator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITAuthenticator.m; sourceTree = ""; }; + E48A3DEE17B3EFF100924C3D /* BITAuthenticatorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITAuthenticatorTests.m; sourceTree = ""; }; + E48A3DF117B408F400924C3D /* BITAuthenticator_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BITAuthenticator_Private.h; sourceTree = ""; }; + E4933E7E17B66CDA00B11ACC /* BITHTTPOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITHTTPOperation.h; sourceTree = ""; }; + E4933E7F17B66CDA00B11ACC /* BITHTTPOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITHTTPOperation.m; sourceTree = ""; }; + E4B4DB7B17B435550099C67F /* BITAuthenticationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITAuthenticationViewController.h; sourceTree = ""; }; + E4B4DB7C17B435550099C67F /* BITAuthenticationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITAuthenticationViewController.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1E5954DB15B6F24A00A03429 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1E5954DC15B6F24A00A03429 /* Foundation.framework in Frameworks */, + 1E5954DD15B6F24A00A03429 /* CrashReporter.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1E59550715B6F45800A03429 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1E5A458C16F0DFC200B55C04 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1EA1170016F4D32C001C015C /* libHockeySDK.a in Frameworks */, + 1E5A459216F0DFC200B55C04 /* SenTestingKit.framework in Frameworks */, + 1E5A459416F0DFC200B55C04 /* UIKit.framework in Frameworks */, + 1EA1170116F4D354001C015C /* CrashReporter.framework in Frameworks */, + 1E5A459516F0DFC200B55C04 /* Foundation.framework in Frameworks */, + 1E7A45FC16F54FB5005B08F1 /* OCHamcrestIOS.framework in Frameworks */, + 1E7A45FD16F54FB5005B08F1 /* OCMockitoIOS.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1E5955A415B71BDC00A03429 /* Images */ = { + isa = PBXGroup; + children = ( + 1E5955BB15B71C8600A03429 /* authorize_denied.png */, + 1E5955BC15B71C8600A03429 /* authorize_denied@2x.png */, + 1E5955BF15B71C8600A03429 /* bg.png */, + 1E5955C015B71C8600A03429 /* buttonHighlight.png */, + 1E5955C115B71C8600A03429 /* buttonHighlight@2x.png */, + 1E1127BC16580C87007067A2 /* buttonRoundedDelete.png */, + 1E1127BD16580C87007067A2 /* buttonRoundedDelete@2x.png */, + 1E1127BE16580C87007067A2 /* buttonRoundedDeleteHighlighted.png */, + 1E1127BF16580C87007067A2 /* buttonRoundedDeleteHighlighted@2x.png */, + 1E1127C016580C87007067A2 /* buttonRoundedRegular.png */, + 1E1127C116580C87007067A2 /* buttonRoundedRegular@2x.png */, + 1E1127C216580C87007067A2 /* buttonRoundedRegularHighlighted.png */, + 1E1127C316580C87007067A2 /* buttonRoundedRegularHighlighted@2x.png */, + 1E5955C415B71C8600A03429 /* IconGradient.png */, + 1E5955C515B71C8600A03429 /* IconGradient@2x.png */, + 1EAF20A4162DC0F600957B1D /* feedbackActivity@2x~ipad.png */, + 1EAF20A5162DC0F600957B1D /* feedbackActivity~ipad.png */, + 1EAF20A6162DC0F600957B1D /* feedbackActiviy.png */, + 1EAF20A7162DC0F600957B1D /* feedbackActiviy@2x.png */, + ); + name = Images; + sourceTree = ""; + }; + 1E5A459616F0DFC200B55C04 /* HockeySDKTests */ = { + isa = PBXGroup; + children = ( + 1EA1170216F53B49001C015C /* Fixtures */, + 1E5A459716F0DFC200B55C04 /* Supporting Files */, + 1E5A459D16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m */, + E48A3DEE17B3EFF100924C3D /* BITAuthenticatorTests.m */, + ); + path = HockeySDKTests; + sourceTree = ""; + }; + 1E5A459716F0DFC200B55C04 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 1E7A45FA16F54FB5005B08F1 /* OCHamcrestIOS.framework */, + 1E7A45FB16F54FB5005B08F1 /* OCMockitoIOS.framework */, + 1E5A459816F0DFC200B55C04 /* HockeySDKTests-Info.plist */, + 1E5A459916F0DFC200B55C04 /* InfoPlist.strings */, + 1E5A459F16F0DFC200B55C04 /* HockeySDKTests-Prefix.pch */, + 1EA1170516F53B91001C015C /* BITTestHelper.h */, + 1EA1170616F53B91001C015C /* BITTestHelper.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 1E66CA8F15D40FF600F35BED /* Support */ = { + isa = PBXGroup; + children = ( + 1E754DC61621BC170070AB92 /* HockeySDK.xcconfig */, + 1E66CA9115D4100500F35BED /* buildnumber.xcconfig */, + ); + name = Support; + sourceTree = ""; + }; + 1E754E441621F95E0070AB92 /* Helper */ = { + isa = PBXGroup; + children = ( + 1E49A4D4161222D400463151 /* HockeySDKPrivate.h */, + 1E49A4D5161222D400463151 /* HockeySDKPrivate.m */, + 1E49A4A0161222B900463151 /* BITHockeyBaseManager.h */, + 1E49A4A1161222B900463151 /* BITHockeyBaseManager.m */, + 1E49A4A2161222B900463151 /* BITHockeyBaseManagerPrivate.h */, + 1E49A4A3161222B900463151 /* BITHockeyBaseViewController.h */, + 1E49A4A4161222B900463151 /* BITHockeyBaseViewController.m */, + 1E49A4A5161222B900463151 /* BITHockeyHelper.h */, + 1E49A4A6161222B900463151 /* BITHockeyHelper.m */, + 1E0FEE26173BDB260061331F /* BITKeychainUtils.h */, + 1E0FEE27173BDB260061331F /* BITKeychainUtils.m */, + 1EACC979162F041E007578C5 /* BITAttributedLabel.h */, + 1EACC97A162F041E007578C5 /* BITAttributedLabel.m */, + 1E49A4A7161222B900463151 /* BITAppStoreHeader.h */, + 1E49A4A8161222B900463151 /* BITAppStoreHeader.m */, + 1E49A4A9161222B900463151 /* BITStoreButton.h */, + 1E49A4AA161222B900463151 /* BITStoreButton.m */, + 1E49A4AB161222B900463151 /* BITWebTableViewCell.h */, + 1E49A4AC161222B900463151 /* BITWebTableViewCell.m */, + ); + name = Helper; + sourceTree = ""; + }; + 1E754E461621FA9A0070AB92 /* Feedback */ = { + isa = PBXGroup; + children = ( + 1E49A4361612223B00463151 /* BITFeedbackMessage.h */, + 1E49A4371612223B00463151 /* BITFeedbackMessage.m */, + 1E49A42D1612223B00463151 /* BITFeedbackComposeViewController.h */, + 1E49A42E1612223B00463151 /* BITFeedbackComposeViewController.m */, + 1EF95CA9162CB313000AE3AD /* BITFeedbackComposeViewControllerDelegate.h */, + 1E49A4381612223B00463151 /* BITFeedbackUserDataViewController.h */, + 1E49A4391612223B00463151 /* BITFeedbackUserDataViewController.m */, + 1E49A42F1612223B00463151 /* BITFeedbackListViewCell.h */, + 1E49A4301612223B00463151 /* BITFeedbackListViewCell.m */, + 1E49A4311612223B00463151 /* BITFeedbackListViewController.h */, + 1E49A4321612223B00463151 /* BITFeedbackListViewController.m */, + 1EF95CA4162CB036000AE3AD /* BITFeedbackActivity.h */, + 1EF95CA5162CB036000AE3AD /* BITFeedbackActivity.m */, + 1E49A4331612223B00463151 /* BITFeedbackManager.h */, + 1E49A4341612223B00463151 /* BITFeedbackManager.m */, + E405266117A2AD300096359C /* BITFeedbackManagerDelegate.h */, + 1E49A4351612223B00463151 /* BITFeedbackManagerPrivate.h */, + ); + name = Feedback; + sourceTree = ""; + }; + 1E754E471621FAD00070AB92 /* Update */ = { + isa = PBXGroup; + children = ( + 1E49A4621612226D00463151 /* BITAppVersionMetaInfo.h */, + 1E49A4631612226D00463151 /* BITAppVersionMetaInfo.m */, + 1E49A4641612226D00463151 /* BITUpdateManager.h */, + 1E49A4651612226D00463151 /* BITUpdateManager.m */, + 1E49A4661612226D00463151 /* BITUpdateManagerDelegate.h */, + 1E49A4671612226D00463151 /* BITUpdateManagerPrivate.h */, + 1E49A4681612226D00463151 /* BITUpdateViewController.h */, + 1E49A4691612226D00463151 /* BITUpdateViewController.m */, + 1E49A46A1612226D00463151 /* BITUpdateViewControllerPrivate.h */, + ); + name = Update; + sourceTree = ""; + }; + 1E754E551621FBAF0070AB92 /* CrashReports */ = { + isa = PBXGroup; + children = ( + 1E754E561621FBB70070AB92 /* BITCrashManager.h */, + 1E754E571621FBB70070AB92 /* BITCrashManager.m */, + 1E754E581621FBB70070AB92 /* BITCrashManagerDelegate.h */, + 1E754E5A1621FBB70070AB92 /* BITCrashReportTextFormatter.h */, + 1E754E5B1621FBB70070AB92 /* BITCrashReportTextFormatter.m */, + ); + name = CrashReports; + sourceTree = ""; + }; + 1E94F9DE16E912DD006570AD /* StoreUpdate */ = { + isa = PBXGroup; + children = ( + 1E94F9DF16E91330006570AD /* BITStoreUpdateManager.h */, + 1E94F9E016E91330006570AD /* BITStoreUpdateManager.m */, + 1E94F9E316E9136B006570AD /* BITStoreUpdateManagerPrivate.h */, + 1E0828FF1708F69A0073050E /* BITStoreUpdateManagerDelegate.h */, + ); + name = StoreUpdate; + sourceTree = ""; + }; + 1EA1170216F53B49001C015C /* Fixtures */ = { + isa = PBXGroup; + children = ( + 1EA1170316F53B49001C015C /* StoreBundleIdentifierUnknown.json */, + 1EA1170816F53E3A001C015C /* StoreBundleIdentifierKnown.json */, + ); + path = Fixtures; + sourceTree = ""; + }; + E400560F148D79B500EB22B9 = { + isa = PBXGroup; + children = ( + E41EB489148D7BF90015DEDC /* HockeySDK */, + 1E5A459616F0DFC200B55C04 /* HockeySDKTests */, + E400561C148D79B500EB22B9 /* Frameworks */, + E4005648148D7A3000EB22B9 /* Resources */, + 1E66CA8F15D40FF600F35BED /* Support */, + E400561B148D79B500EB22B9 /* Products */, + ); + sourceTree = ""; + }; + E400561B148D79B500EB22B9 /* Products */ = { + isa = PBXGroup; + children = ( + 1E5954F215B6F24A00A03429 /* libHockeySDK.a */, + 1E59550A15B6F45800A03429 /* HockeySDKResources.bundle */, + 1E5A459016F0DFC200B55C04 /* HockeySDKTests.octest */, + ); + name = Products; + sourceTree = ""; + }; + E400561C148D79B500EB22B9 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E41EB48B148D7C4E0015DEDC /* CrashReporter.framework */, + E400561D148D79B500EB22B9 /* Foundation.framework */, + 1E5A459116F0DFC200B55C04 /* SenTestingKit.framework */, + 1E5A459316F0DFC200B55C04 /* UIKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E4005648148D7A3000EB22B9 /* Resources */ = { + isa = PBXGroup; + children = ( + 1EDA60CF15C2C1450032D10B /* HockeySDK-Info.plist */, + 1E5955A415B71BDC00A03429 /* Images */, + 1E59555F15B6F80E00A03429 /* HockeySDK.strings */, + ); + name = Resources; + path = ../Resources; + sourceTree = ""; + }; + E41EB458148D7BF50015DEDC /* Classes */ = { + isa = PBXGroup; + children = ( + E48A3DE917B3ECF900924C3D /* Network */, + 1E754E441621F95E0070AB92 /* Helper */, + 1E754E551621FBAF0070AB92 /* CrashReports */, + 1E754E461621FA9A0070AB92 /* Feedback */, + 1E754E471621FAD00070AB92 /* Update */, + 1E94F9DE16E912DD006570AD /* StoreUpdate */, + E41EB465148D7BF50015DEDC /* BITHockeyManager.h */, + E41EB466148D7BF50015DEDC /* BITHockeyManager.m */, + 1EC69F5D1615001500808FD9 /* BITHockeyManagerPrivate.h */, + 1E5955FA15B7877A00A03429 /* BITHockeyManagerDelegate.h */, + 1E71509A15B5C76F004E88FF /* HockeySDK.h */, + ); + name = Classes; + path = ../Classes; + sourceTree = ""; + }; + E41EB489148D7BF90015DEDC /* HockeySDK */ = { + isa = PBXGroup; + children = ( + E41EB458148D7BF50015DEDC /* Classes */, + ); + name = HockeySDK; + sourceTree = ""; + }; + E48A3DE917B3ECF900924C3D /* Network */ = { + isa = PBXGroup; + children = ( + E48A3DF017B408D800924C3D /* private */, + E48A3DEA17B3ED1C00924C3D /* BITAuthenticator.h */, + E48A3DEB17B3ED1C00924C3D /* BITAuthenticator.m */, + ); + name = Network; + sourceTree = ""; + }; + E48A3DF017B408D800924C3D /* private */ = { + isa = PBXGroup; + children = ( + E48A3DF117B408F400924C3D /* BITAuthenticator_Private.h */, + E4B4DB7B17B435550099C67F /* BITAuthenticationViewController.h */, + E4B4DB7C17B435550099C67F /* BITAuthenticationViewController.m */, + E4933E7E17B66CDA00B11ACC /* BITHTTPOperation.h */, + E4933E7F17B66CDA00B11ACC /* BITHTTPOperation.m */, + ); + name = private; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 1E59558B15B6FD8800A03429 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 1E59559B15B6FDA500A03429 /* HockeySDK.h in Headers */, + 1E59559A15B6FDA500A03429 /* BITHockeyManager.h in Headers */, + 1E5955FD15B7877B00A03429 /* BITHockeyManagerDelegate.h in Headers */, + 1E754E5C1621FBB70070AB92 /* BITCrashManager.h in Headers */, + 1E754E5E1621FBB70070AB92 /* BITCrashManagerDelegate.h in Headers */, + 1E49A4731612226D00463151 /* BITUpdateManager.h in Headers */, + 1E49A4791612226D00463151 /* BITUpdateManagerDelegate.h in Headers */, + 1E49A44E1612223B00463151 /* BITFeedbackManager.h in Headers */, + E4B4DB7D17B435550099C67F /* BITAuthenticationViewController.h in Headers */, + 1E49A4481612223B00463151 /* BITFeedbackListViewController.h in Headers */, + 1E49A47F1612226D00463151 /* BITUpdateViewController.h in Headers */, + 1E49A43C1612223B00463151 /* BITFeedbackComposeViewController.h in Headers */, + 1EF95CAA162CB314000AE3AD /* BITFeedbackComposeViewControllerDelegate.h in Headers */, + 1EF95CA6162CB037000AE3AD /* BITFeedbackActivity.h in Headers */, + 1E49A4AF161222B900463151 /* BITHockeyBaseManager.h in Headers */, + 1E49A4B8161222B900463151 /* BITHockeyBaseViewController.h in Headers */, + 1E49A4421612223B00463151 /* BITFeedbackListViewCell.h in Headers */, + 1E49A4541612223B00463151 /* BITFeedbackManagerPrivate.h in Headers */, + 1E49A4571612223B00463151 /* BITFeedbackMessage.h in Headers */, + 1E49A45D1612223B00463151 /* BITFeedbackUserDataViewController.h in Headers */, + 1E49A46D1612226D00463151 /* BITAppVersionMetaInfo.h in Headers */, + 1E49A47C1612226D00463151 /* BITUpdateManagerPrivate.h in Headers */, + 1E49A4851612226D00463151 /* BITUpdateViewControllerPrivate.h in Headers */, + 1E49A4B5161222B900463151 /* BITHockeyBaseManagerPrivate.h in Headers */, + E4933E8017B66CDA00B11ACC /* BITHTTPOperation.h in Headers */, + 1E49A4BE161222B900463151 /* BITHockeyHelper.h in Headers */, + 1E49A4C4161222B900463151 /* BITAppStoreHeader.h in Headers */, + 1E49A4CA161222B900463151 /* BITStoreButton.h in Headers */, + E405266217A2AD300096359C /* BITFeedbackManagerDelegate.h in Headers */, + 1E49A4D0161222B900463151 /* BITWebTableViewCell.h in Headers */, + 1E49A4D8161222D400463151 /* HockeySDKPrivate.h in Headers */, + 1EC69F601615001500808FD9 /* BITHockeyManagerPrivate.h in Headers */, +<<<<<<< HEAD + 1E754E5F1621FBB70070AB92 /* BITCrashManagerPrivate.h in Headers */, + E48A3DEC17B3ED1C00924C3D /* BITAuthenticator.h in Headers */, +======= +>>>>>>> develop + 1E754E601621FBB70070AB92 /* BITCrashReportTextFormatter.h in Headers */, + 1EACC97B162F041E007578C5 /* BITAttributedLabel.h in Headers */, + 1E0FEE28173BDB260061331F /* BITKeychainUtils.h in Headers */, + 1E94F9E116E91330006570AD /* BITStoreUpdateManager.h in Headers */, + 1E94F9E416E9136B006570AD /* BITStoreUpdateManagerPrivate.h in Headers */, + 1E0829001708F69A0073050E /* BITStoreUpdateManagerDelegate.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 1E5954CB15B6F24A00A03429 /* HockeySDK */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1E5954EF15B6F24A00A03429 /* Build configuration list for PBXNativeTarget "HockeySDK" */; + buildPhases = ( + 1E5954CC15B6F24A00A03429 /* Sources */, + 1E5954DB15B6F24A00A03429 /* Frameworks */, + 1E59558B15B6FD8800A03429 /* Headers */, + 1EE9071A16F6871F003DDE1D /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 1E59557E15B6F97100A03429 /* PBXTargetDependency */, + ); + name = HockeySDK; + productName = HockeySDK; + productReference = 1E5954F215B6F24A00A03429 /* libHockeySDK.a */; + productType = "com.apple.product-type.library.static"; + }; + 1E59550915B6F45800A03429 /* HockeySDKResources */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1E59551415B6F45800A03429 /* Build configuration list for PBXNativeTarget "HockeySDKResources" */; + buildPhases = ( + 1E59550615B6F45800A03429 /* Sources */, + 1E59550715B6F45800A03429 /* Frameworks */, + 1E59550815B6F45800A03429 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = HockeySDKResources; + productName = HockeySDKBundle; + productReference = 1E59550A15B6F45800A03429 /* HockeySDKResources.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 1E5A458F16F0DFC200B55C04 /* HockeySDKTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1E5A45A216F0DFC200B55C04 /* Build configuration list for PBXNativeTarget "HockeySDKTests" */; + buildPhases = ( + 1E5A458B16F0DFC200B55C04 /* Sources */, + 1E5A458C16F0DFC200B55C04 /* Frameworks */, + 1E5A458D16F0DFC200B55C04 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 1EA1170B16F54A5C001C015C /* PBXTargetDependency */, + 1EA116FF16F4D302001C015C /* PBXTargetDependency */, + ); + name = HockeySDKTests; + productName = HockeySDKTests; + productReference = 1E5A459016F0DFC200B55C04 /* HockeySDKTests.octest */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E4005611148D79B500EB22B9 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0440; + }; + buildConfigurationList = E4005614148D79B500EB22B9 /* Build configuration list for PBXProject "HockeySDK" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + de, + es, + fr, + it, + ja, + nl, + "pt-PT", + pt, + ru, + sv, + tr, + hr, + zh, + "zh-Hans", + ro, + hu, + ); + mainGroup = E400560F148D79B500EB22B9; + productRefGroup = E400561B148D79B500EB22B9 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 1E5954CB15B6F24A00A03429 /* HockeySDK */, + 1E59550915B6F45800A03429 /* HockeySDKResources */, + 1E8E66AD15BC3D7700632A2E /* HockeySDK Documentation */, + 1E4F61E91621AD970033EFC5 /* HockeySDK Framework */, + 1E5A458F16F0DFC200B55C04 /* HockeySDKTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1E59550815B6F45800A03429 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1E5955C615B71C8600A03429 /* authorize_denied.png in Resources */, + 1E5955C715B71C8600A03429 /* authorize_denied@2x.png in Resources */, + 1E5955CA15B71C8600A03429 /* bg.png in Resources */, + 1E5955CB15B71C8600A03429 /* buttonHighlight.png in Resources */, + 1E5955CC15B71C8600A03429 /* buttonHighlight@2x.png in Resources */, + 1E5955CF15B71C8600A03429 /* IconGradient.png in Resources */, + 1E5955D015B71C8600A03429 /* IconGradient@2x.png in Resources */, + 1EAF20A8162DC0F600957B1D /* feedbackActivity@2x~ipad.png in Resources */, + 1EAF20A9162DC0F600957B1D /* feedbackActivity~ipad.png in Resources */, + 1EAF20AA162DC0F600957B1D /* feedbackActiviy.png in Resources */, + 1EAF20AB162DC0F600957B1D /* feedbackActiviy@2x.png in Resources */, + 1E1127C416580C87007067A2 /* buttonRoundedDelete.png in Resources */, + 1E1127C516580C87007067A2 /* buttonRoundedDelete@2x.png in Resources */, + 1E1127C616580C87007067A2 /* buttonRoundedDeleteHighlighted.png in Resources */, + 1E1127C716580C87007067A2 /* buttonRoundedDeleteHighlighted@2x.png in Resources */, + 1E1127C816580C87007067A2 /* buttonRoundedRegular.png in Resources */, + 1E1127C916580C87007067A2 /* buttonRoundedRegular@2x.png in Resources */, + 1E1127CA16580C87007067A2 /* buttonRoundedRegularHighlighted.png in Resources */, + 1E1127CB16580C87007067A2 /* buttonRoundedRegularHighlighted@2x.png in Resources */, + 1EB52FD5167B766100C801D5 /* HockeySDK.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1E5A458D16F0DFC200B55C04 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1EA1170C16F54A64001C015C /* HockeySDKResources.bundle in Resources */, + 1E5A459B16F0DFC200B55C04 /* InfoPlist.strings in Resources */, + 1EA1170416F53B49001C015C /* StoreBundleIdentifierUnknown.json in Resources */, + 1EA1170916F53E3A001C015C /* StoreBundleIdentifierKnown.json in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 1E4F61ED1621ADE70033EFC5 /* Build universal embedded framework */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Build universal embedded framework"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Sets the target folders and the final framework product.\nFMK_NAME=HockeySDK\nFMK_VERSION=A\nFMK_RESOURCE_BUNDLE=HockeySDKResources\n\n# Documentation\nHOCKEYSDK_DOCSET_VERSION_NAME=\"de.bitstadium.${HOCKEYSDK_DOCSET_NAME}-${VERSION_STRING}\"\n\n# Install dir will be the final output to the framework.\n# The following line create it in the root folder of the current project.\nPRODUCTS_DIR=${SRCROOT}/../Products\nTEMP_DIR=${PRODUCTS_DIR}/Temp\nINSTALL_DIR=${TEMP_DIR}/${FMK_NAME}.framework\n\n# Working dir will be deleted after the framework creation.\nWRK_DIR=build\nDEVICE_DIR=${WRK_DIR}/Release-iphoneos\nSIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator\nHEADERS_DIR=${WRK_DIR}/Release-iphoneos/usr/local/include\n\n# Building both architectures.\nxcodebuild -project \"HockeySDK.xcodeproj\" -configuration \"Release\" -target \"${FMK_NAME}\" -sdk iphoneos\nxcodebuild -project \"HockeySDK.xcodeproj\" -configuration \"Release\" -target \"${FMK_NAME}\" -sdk iphonesimulator\n\n# Cleaning the oldest.\nif [ -d \"${TEMP_DIR}\" ]\nthen\nrm -rf \"${TEMP_DIR}\"\nfi\n\n# Creates and renews the final product folder.\nmkdir -p \"${INSTALL_DIR}\"\nmkdir -p \"${INSTALL_DIR}/Versions\"\nmkdir -p \"${INSTALL_DIR}/Versions/${FMK_VERSION}\"\nmkdir -p \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources\"\nmkdir -p \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Headers\"\n\n# Creates the internal links.\n# It MUST uses relative path, otherwise will not work when the folder is copied/moved.\nln -s \"${FMK_VERSION}\" \"${INSTALL_DIR}/Versions/Current\"\nln -s \"Versions/Current/Headers\" \"${INSTALL_DIR}/Headers\"\nln -s \"Versions/Current/Resources\" \"${INSTALL_DIR}/Resources\"\nln -s \"Versions/Current/${FMK_NAME}\" \"${INSTALL_DIR}/${FMK_NAME}\"\n\n# Copies the headers and resources files to the final product folder.\ncp -R \"${SRCROOT}/build/Release-iphoneos/include/HockeySDK/\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Headers/\"\ncp -R \"${DEVICE_DIR}/${FMK_RESOURCE_BUNDLE}.bundle\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources/\"\ncp -f \"${SRCROOT}/${FMK_NAME}.xcconfig\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources/\"\n\n# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.\nlipo -create \"${DEVICE_DIR}/lib${FMK_NAME}.a\" \"${SIMULATOR_DIR}/lib${FMK_NAME}.a\" -output \"${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}\"\n\n# Combine the CrashReporter static library into a new Hockey static library file if they are not already present and copy the public headers too\nif [ -z $(otool -L \"${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}\" | grep 'libCrashReporter') ]\nthen\nlibtool -static -o \"${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}\" \"${SRCROOT}/../Vendor/CrashReporter.framework/Versions/A/CrashReporter\"\nfi\n\nrm -r \"${WRK_DIR}\"\n\n# build embeddedframework folder and move framework into it\nmkdir \"${INSTALL_DIR}/../${FMK_NAME}.embeddedframework\"\nmv \"${INSTALL_DIR}\" \"${INSTALL_DIR}/../${FMK_NAME}.embeddedframework/${FMK_NAME}.framework\"\n\n# link Resources\nNEW_INSTALL_DIR=${TEMP_DIR}/${FMK_NAME}.embeddedframework\nmkdir \"${NEW_INSTALL_DIR}/Resources\"\nln -s \"../${FMK_NAME}.framework/Resources/${FMK_RESOURCE_BUNDLE}.bundle\" \"${NEW_INSTALL_DIR}/Resources/${FMK_RESOURCE_BUNDLE}.bundle\"\nln -s \"../${FMK_NAME}.framework/Resources/${FMK_NAME}.xcconfig\" \"${NEW_INSTALL_DIR}/Resources/${FMK_NAME}.xcconfig\"\n\n# copy license, changelog, documentation\ncp -f \"${SRCROOT}/../Docs/Changelog-template.md\" \"${TEMP_DIR}/CHANGELOG\"\ncp -f \"${SRCROOT}/../Docs/Guide-Installation-Setup-template.md\" \"${TEMP_DIR}/README.md\"\ncp -f \"${SRCROOT}/../LICENSE\" \"${TEMP_DIR}\"\nmkdir \"${TEMP_DIR}/${HOCKEYSDK_DOCSET_VERSION_NAME}.docset\"\ncp -R \"${SRCROOT}/../documentation/docset/Contents\" \"${TEMP_DIR}/${HOCKEYSDK_DOCSET_VERSION_NAME}.docset\"\n\n# build zip\ncd \"${PRODUCTS_DIR}\"\nrm -f \"${FMK_NAME}-iOS-${VERSION_STRING}.zip\"\ncd \"${TEMP_DIR}\"\nzip -yr \"../${FMK_NAME}-iOS-${VERSION_STRING}.zip\" \"./${FMK_NAME}.embeddedframework\" \"./CHANGELOG\" \"./README.md\" \"./LICENSE\" \"./${HOCKEYSDK_DOCSET_VERSION_NAME}.docset\" -x \\*/.*\n\n#copy to output dir on cisimple\nif [ $CISIMPLE ]; then\n if [ ! -d \"${CONFIGURATION_BUILD_DIR}\" ]; then\n mkdir \"${CONFIGURATION_BUILD_DIR}\"\n fi\n cd \"${PRODUCTS_DIR}\"\n cp \"${FMK_NAME}-iOS-${VERSION_STRING}.zip\" \"${CONFIGURATION_BUILD_DIR}/${FMK_NAME}-iOS-${VERSION_STRING}.zip\"\nfi"; + }; + 1E8E66B215BC3D8200632A2E /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/usr/local/bin/appledoc \\\n --output \"${SOURCE_ROOT}/../documentation\" \\\n --ignore Vendor \\\n --ignore Products \\\n --ignore .m \\\n --create-html \\\n --create-docset \\\n --install-docset \\\n --keep-intermediate-files \\\n --project-name \"${HOCKEYSDK_DOCSET_NAME} ${VERSION_STRING}\" \\\n --project-version \"${VERSION_STRING}\" \\\n --project-company \"BitStadium GmbH\" \\\n --company-id \"de.bitstadium\" \\\n --docset-bundle-name \"${HOCKEYSDK_DOCSET_NAME} ${VERSION_STRING}\" \\\n --docset-feed-name \"${HOCKEYSDK_DOCSET_NAME}\" \\\n --docset-desc \"\" \\\n --docset-platform-family \"iphoneos\" \\\n --index-desc \"${SOURCE_ROOT}/../docs/index.md\" \\\n --include \"${SOURCE_ROOT}/../docs/index.html\" \\\n --include \"${SOURCE_ROOT}/../docs/\" \\\n --merge-categories \\\n --no-repeat-first-par \\\n --warn-undocumented-object \\\n --warn-undocumented-member \\\n --warn-empty-description \\\n --warn-unknown-directive \\\n --warn-invalid-crossref \\\n --warn-missing-arg \\\n --logformat xcode \\\n --exit-threshold 2 \\\n \"${SOURCE_ROOT}/../\"\n"; + }; + 1EE9071A16F6871F003DDE1D /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/../Vendor/XcodeCoverage/exportenv.sh\""; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 1E5954CC15B6F24A00A03429 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1E5954D315B6F24A00A03429 /* BITHockeyManager.m in Sources */, + 1E49A43F1612223B00463151 /* BITFeedbackComposeViewController.m in Sources */, + 1E49A4451612223B00463151 /* BITFeedbackListViewCell.m in Sources */, + 1E49A44B1612223B00463151 /* BITFeedbackListViewController.m in Sources */, + 1E49A4511612223B00463151 /* BITFeedbackManager.m in Sources */, + E4933E8117B66CDA00B11ACC /* BITHTTPOperation.m in Sources */, + 1E49A45A1612223B00463151 /* BITFeedbackMessage.m in Sources */, + 1E49A4601612223B00463151 /* BITFeedbackUserDataViewController.m in Sources */, + 1E49A4701612226D00463151 /* BITAppVersionMetaInfo.m in Sources */, + 1E49A4761612226D00463151 /* BITUpdateManager.m in Sources */, + 1E49A4821612226D00463151 /* BITUpdateViewController.m in Sources */, + E4B4DB7E17B435550099C67F /* BITAuthenticationViewController.m in Sources */, + 1E49A4B2161222B900463151 /* BITHockeyBaseManager.m in Sources */, + 1E49A4BB161222B900463151 /* BITHockeyBaseViewController.m in Sources */, + 1E49A4C1161222B900463151 /* BITHockeyHelper.m in Sources */, + 1E49A4C7161222B900463151 /* BITAppStoreHeader.m in Sources */, + 1E49A4CD161222B900463151 /* BITStoreButton.m in Sources */, + 1E49A4D3161222B900463151 /* BITWebTableViewCell.m in Sources */, + E48A3DED17B3ED1C00924C3D /* BITAuthenticator.m in Sources */, + 1E49A4DB161222D400463151 /* HockeySDKPrivate.m in Sources */, + 1E754E5D1621FBB70070AB92 /* BITCrashManager.m in Sources */, + 1E754E611621FBB70070AB92 /* BITCrashReportTextFormatter.m in Sources */, + 1EF95CA7162CB037000AE3AD /* BITFeedbackActivity.m in Sources */, + 1EACC97C162F041E007578C5 /* BITAttributedLabel.m in Sources */, + 1E0FEE29173BDB260061331F /* BITKeychainUtils.m in Sources */, + 1E94F9E216E91330006570AD /* BITStoreUpdateManager.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1E59550615B6F45800A03429 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1E5A458B16F0DFC200B55C04 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1E5A459E16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m in Sources */, + E48A3DEF17B3EFF100924C3D /* BITAuthenticatorTests.m in Sources */, + 1EA1170716F53B91001C015C /* BITTestHelper.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 1E59557E15B6F97100A03429 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1E59550915B6F45800A03429 /* HockeySDKResources */; + targetProxy = 1E59557D15B6F97100A03429 /* PBXContainerItemProxy */; + }; + 1E754E431621F6290070AB92 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1E8E66AD15BC3D7700632A2E /* HockeySDK Documentation */; + targetProxy = 1E754E421621F6290070AB92 /* PBXContainerItemProxy */; + }; + 1EA116FF16F4D302001C015C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1E5954CB15B6F24A00A03429 /* HockeySDK */; + targetProxy = 1EA116FE16F4D302001C015C /* PBXContainerItemProxy */; + }; + 1EA1170B16F54A5C001C015C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1E59550915B6F45800A03429 /* HockeySDKResources */; + targetProxy = 1EA1170A16F54A5C001C015C /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 1E59555F15B6F80E00A03429 /* HockeySDK.strings */ = { + isa = PBXVariantGroup; + children = ( + 1E59556015B6F80E00A03429 /* de */, + 1E59556415B6F81C00A03429 /* es */, + 1E59556615B6F82300A03429 /* fr */, + 1E59556815B6F82A00A03429 /* it */, + 1E59556A15B6F83100A03429 /* ja */, + 1E59557015B6F84700A03429 /* pt */, + 1E59557215B6F84D00A03429 /* ru */, + 1E36D8B816667611000B134C /* hr */, + 1E6F0450167B5E5600ED1C86 /* pt-PT */, + 1EB52FC3167B73D400C801D5 /* en */, + 1EA512DF167F7EF000FC9FBA /* zh-Hans */, + 1E6DDCEE169E290C0076C65D /* ro */, + BEE0207C16C5107E004426EA /* hu */, + ); + name = HockeySDK.strings; + sourceTree = ""; + }; + 1E5A459916F0DFC200B55C04 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 1E5A459A16F0DFC200B55C04 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 1E4F61EB1621AD970033EFC5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = HockeySDK.framework; + }; + name = Debug; + }; + 1E4F61EC1621AD970033EFC5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = HockeySDK.framework; + }; + name = Release; + }; + 1E5954F015B6F24A00A03429 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + DSTROOT = /tmp/HockeySDK.dst; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../Vendor\"", + ); + GCC_THUMB_SUPPORT = NO; + PRODUCT_NAME = HockeySDK; + PUBLIC_HEADERS_FOLDER_PATH = "include/$(PRODUCT_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 1E5954F115B6F24A00A03429 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DSTROOT = /tmp/HockeySDK.dst; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../Vendor\"", + ); + GCC_THUMB_SUPPORT = NO; + PRODUCT_NAME = HockeySDK; + PUBLIC_HEADERS_FOLDER_PATH = "include/$(PRODUCT_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 1E59551515B6F45800A03429 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_THUMB_SUPPORT = NO; + INFOPLIST_FILE = "../Resources/HockeySDK-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 1E59551615B6F45800A03429 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_THUMB_SUPPORT = NO; + INFOPLIST_FILE = "../Resources/HockeySDK-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 1E5A45A016F0DFC200B55C04 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + FRAMEWORK_SEARCH_PATHS = ( + "\"$(SDKROOT)/Developer/Library/Frameworks\"", + "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", + "\"$(SRCROOT)/../Vendor\"", + "\"$(SRCROOT)/HockeySDKTests\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "HockeySDKTests/HockeySDKTests-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_UNINITIALIZED_AUTOS = YES; + INFOPLIST_FILE = "HockeySDKTests/HockeySDKTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/HockeySDKTests\"", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = octest; + }; + name = Debug; + }; + 1E5A45A116F0DFC200B55C04 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "\"$(SDKROOT)/Developer/Library/Frameworks\"", + "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", + "\"$(SRCROOT)/../Vendor\"", + "\"$(SRCROOT)/HockeySDKTests\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "HockeySDKTests/HockeySDKTests-Prefix.pch"; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + INFOPLIST_FILE = "HockeySDKTests/HockeySDKTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/HockeySDKTests\"", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = octest; + }; + name = Release; + }; + 1E68F4A716F7843F00053706 /* CodeCoverage */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1E66CA9115D4100500F35BED /* buildnumber.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "BITHOCKEY_STATIC_LIBRARY=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_THUMB_SUPPORT = NO; + GCC_VERSION = ""; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_STRICT_SELECTOR_MATCH = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = "../Resources/HockeySDK-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + MACOSX_DEPLOYMENT_TARGET = 10.5; + RUN_CLANG_STATIC_ANALYZER = YES; + SDKROOT = iphoneos; + }; + name = CodeCoverage; + }; + 1E68F4A816F7843F00053706 /* CodeCoverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + DSTROOT = /tmp/HockeySDK.dst; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../Vendor\"", + ); + GCC_THUMB_SUPPORT = NO; + PRODUCT_NAME = HockeySDK; + PUBLIC_HEADERS_FOLDER_PATH = "include/$(PRODUCT_NAME)"; + SKIP_INSTALL = YES; + }; + name = CodeCoverage; + }; + 1E68F4A916F7843F00053706 /* CodeCoverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_THUMB_SUPPORT = NO; + INFOPLIST_FILE = "../Resources/HockeySDK-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = CodeCoverage; + }; + 1E68F4AA16F7843F00053706 /* CodeCoverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_THUMB_SUPPORT = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = CodeCoverage; + }; + 1E68F4AB16F7843F00053706 /* CodeCoverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = HockeySDK.framework; + }; + name = CodeCoverage; + }; + 1E68F4AC16F7843F00053706 /* CodeCoverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + FRAMEWORK_SEARCH_PATHS = ( + "\"$(SDKROOT)/Developer/Library/Frameworks\"", + "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", + "\"$(SRCROOT)/../Vendor\"", + "\"$(SRCROOT)/HockeySDKTests\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "HockeySDKTests/HockeySDKTests-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_UNINITIALIZED_AUTOS = YES; + INFOPLIST_FILE = "HockeySDKTests/HockeySDKTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/HockeySDKTests\"", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = octest; + }; + name = CodeCoverage; + }; + 1E8E66AE15BC3D7700632A2E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_THUMB_SUPPORT = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 1E8E66AF15BC3D7700632A2E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_THUMB_SUPPORT = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + E400563C148D79B500EB22B9 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1E66CA9115D4100500F35BED /* buildnumber.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "BITHOCKEY_STATIC_LIBRARY=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_THUMB_SUPPORT = NO; + GCC_VERSION = ""; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_STRICT_SELECTOR_MATCH = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = "../Resources/HockeySDK-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + MACOSX_DEPLOYMENT_TARGET = 10.5; + RUN_CLANG_STATIC_ANALYZER = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + E400563D148D79B500EB22B9 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1E66CA9115D4100500F35BED /* buildnumber.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "BITHOCKEY_STATIC_LIBRARY=1", + "$(inherited)", + ); + GCC_THUMB_SUPPORT = NO; + GCC_VERSION = ""; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_STRICT_SELECTOR_MATCH = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = "../Resources/HockeySDK-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + MACOSX_DEPLOYMENT_TARGET = 10.5; + RUN_CLANG_STATIC_ANALYZER = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = NO; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1E4F61EA1621AD970033EFC5 /* Build configuration list for PBXAggregateTarget "HockeySDK Framework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1E4F61EB1621AD970033EFC5 /* Debug */, + 1E68F4AB16F7843F00053706 /* CodeCoverage */, + 1E4F61EC1621AD970033EFC5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1E5954EF15B6F24A00A03429 /* Build configuration list for PBXNativeTarget "HockeySDK" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1E5954F015B6F24A00A03429 /* Debug */, + 1E68F4A816F7843F00053706 /* CodeCoverage */, + 1E5954F115B6F24A00A03429 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1E59551415B6F45800A03429 /* Build configuration list for PBXNativeTarget "HockeySDKResources" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1E59551515B6F45800A03429 /* Debug */, + 1E68F4A916F7843F00053706 /* CodeCoverage */, + 1E59551615B6F45800A03429 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1E5A45A216F0DFC200B55C04 /* Build configuration list for PBXNativeTarget "HockeySDKTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1E5A45A016F0DFC200B55C04 /* Debug */, + 1E68F4AC16F7843F00053706 /* CodeCoverage */, + 1E5A45A116F0DFC200B55C04 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1E8E66B015BC3D7700632A2E /* Build configuration list for PBXAggregateTarget "HockeySDK Documentation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1E8E66AE15BC3D7700632A2E /* Debug */, + 1E68F4AA16F7843F00053706 /* CodeCoverage */, + 1E8E66AF15BC3D7700632A2E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E4005614148D79B500EB22B9 /* Build configuration list for PBXProject "HockeySDK" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E400563C148D79B500EB22B9 /* Debug */, + 1E68F4A716F7843F00053706 /* CodeCoverage */, + E400563D148D79B500EB22B9 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E4005611148D79B500EB22B9 /* Project object */; +} diff --git a/Support/HockeySDKTests/BITAuthenticatorTests.m b/Support/HockeySDKTests/BITAuthenticatorTests.m index b6dbcd6c9f..9ded1ce2bc 100644 --- a/Support/HockeySDKTests/BITAuthenticatorTests.m +++ b/Support/HockeySDKTests/BITAuthenticatorTests.m @@ -41,7 +41,6 @@ } - (void)tearDown { - [_sut cancelOperationsWithPath:nil method:nil]; [_sut cleanupInternalStorage]; _sut = nil; @@ -279,177 +278,4 @@ [verifyCount(delegateMock, times(1)) authenticatorDidValidateInstallation:_sut]; } -#pragma mark - Networking base tests -- (void) testThatURLRequestHasBaseURLSet { - _sut.serverURL = @"http://myserver.com"; - NSMutableURLRequest *request = [_sut requestWithMethod:@"GET" path:nil parameters:nil]; - assertThat(request.URL, equalTo([NSURL URLWithString:@"http://myserver.com/"])); -} - -- (void) testThatURLRequestHasPathAppended { - _sut.serverURL = @"http://myserver.com"; - NSMutableURLRequest *request = [_sut requestWithMethod:@"GET" path:@"projects" parameters:nil]; - assertThat(request.URL, equalTo([NSURL URLWithString:@"http://myserver.com/projects"])); -} - -- (void) testThatURLRequestHasMethodSet { - NSMutableURLRequest *request = [_sut requestWithMethod:@"POST" path:nil parameters:nil]; - - assertThat(request.HTTPMethod, equalTo(@"POST")); -} - -- (void) testThatOperationHasURLRequestSet { - _sut.serverURL = @"http://myserver.com"; - NSURLRequest *r = [_sut requestWithMethod:@"PUT" path:@"x" parameters:nil]; - BITHTTPOperation *op = [_sut operationWithURLRequest:r - completion:nil]; - assertThat(op.URLRequest, equalTo(r)); -} - -- (void) testThatURLRequestHasParametersInGetAppended { - NSDictionary *parameters = @{ - @"email" : @"peter@pan.de", - @"push" : @"pop", - }; - NSMutableURLRequest *request = [_sut requestWithMethod:@"GET" - path:@"something" - parameters:parameters]; - NSURL *url = request.URL; - NSString *params = [url query]; - NSArray *paramPairs = [params componentsSeparatedByString:@"&"]; - assertThat(paramPairs, hasCountOf(2)); - - NSMutableDictionary *dict = [NSMutableDictionary new]; - for(NSString *paramPair in paramPairs) { - NSArray *a = [paramPair componentsSeparatedByString:@"="]; - assertThat(a, hasCountOf(2)); - dict[a[0]] = a[1]; - } - assertThat(dict, equalTo(parameters)); -} - -- (void) testThatURLRequestHasParametersInPostInTheBody { - //pending -} - -#pragma mark - Convenience methods -- (void) testThatGetPathCreatesAndEnquesAnOperation { - assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(0)); - [given([_sut operationWithURLRequest:(id)anything() - completion:nil]) willReturn:[NSOperation new]]; - - [_sut getPath:@"endpoint" - parameters:nil - completion:nil]; - assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(1)); -} - -- (void) testThatPostPathCreatesAndEnquesAnOperation { - assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(0)); - [given([_sut operationWithURLRequest:nil - completion:nil]) willReturn:[NSOperation new]]; - - [_sut postPath:@"endpoint" - parameters:nil - completion:nil]; - assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(1)); -} - -#pragma mark - Completion Tests -- (void) testThatCompletionIsCalled { - //TODO -} - -#pragma mark - HTTPOperation enqueuing / cancellation -- (void) testThatOperationIsQueued { - assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(0)); - [_sut.operationQueue setSuspended:YES]; - BITHTTPOperation *op = [BITHTTPOperation new]; - [_sut enqeueHTTPOperation:op]; - - assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(1)); -} - -- (void) testThatOperationCancellingMatchesAllOperationsWithNilMethod { - [_sut.operationQueue setSuspended:YES]; - NSURLRequest *requestGet = [_sut requestWithMethod:@"GET" path:nil parameters:nil]; - NSURLRequest *requestPut = [_sut requestWithMethod:@"PUT" path:nil parameters:nil]; - NSURLRequest *requestPost = [_sut requestWithMethod:@"POST" path:nil parameters:nil]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestGet - completion:nil]]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPut - completion:nil]]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPost - completion:nil]]; - assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(3)); - NSUInteger numCancelled = [_sut cancelOperationsWithPath:nil method:nil]; - assertThatUnsignedInt(numCancelled, equalToUnsignedInt(3)); -} - -- (void) testThatOperationCancellingMatchesAllOperationsWithNilPath { - [_sut.operationQueue setSuspended:YES]; - NSURLRequest *requestGet = [_sut requestWithMethod:@"GET" path:@"test" parameters:nil]; - NSURLRequest *requestPut = [_sut requestWithMethod:@"PUT" path:@"Another/acas" parameters:nil]; - NSURLRequest *requestPost = [_sut requestWithMethod:@"POST" path:nil parameters:nil]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestGet - completion:nil]]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPut - completion:nil]]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPost - completion:nil]]; - assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(3)); - NSUInteger numCancelled = [_sut cancelOperationsWithPath:nil method:nil]; - assertThatUnsignedInt(numCancelled, equalToUnsignedInt(3)); -} - - -- (void) testThatOperationCancellingMatchesAllOperationsWithSetPath { - NSURLRequest *requestGet = [_sut requestWithMethod:@"GET" path:@"test" parameters:nil]; - NSURLRequest *requestPut = [_sut requestWithMethod:@"PUT" path:@"Another/acas" parameters:nil]; - NSURLRequest *requestPost = [_sut requestWithMethod:@"POST" path:nil parameters:nil]; - [_sut.operationQueue setSuspended:YES]; - - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestGet - completion:nil]]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPut - completion:nil]]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPost - completion:nil]]; - assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(3)); - NSUInteger numCancelled = [_sut cancelOperationsWithPath:@"Another/acas" method:nil]; - assertThatUnsignedInt(numCancelled, equalToUnsignedInt(1)); -} - -- (void) testThatOperationCancellingMatchesAllOperationsWithSetMethod { - NSURLRequest *requestGet = [_sut requestWithMethod:@"GET" path:@"test" parameters:nil]; - NSURLRequest *requestPut = [_sut requestWithMethod:@"PUT" path:@"Another/acas" parameters:nil]; - NSURLRequest *requestPost = [_sut requestWithMethod:@"POST" path:nil parameters:nil]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestGet - completion:nil]]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPut - completion:nil]]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPost - completion:nil]]; - assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(3)); - NSUInteger numCancelled = [_sut cancelOperationsWithPath:nil method:@"POST"]; - assertThatUnsignedInt(numCancelled, equalToUnsignedInt(1)); -} - -- (void) testThatOperationCancellingMatchesAllOperationsWithSetMethodAndPath { - NSURLRequest *requestGet = [_sut requestWithMethod:@"GET" path:@"test" parameters:nil]; - NSURLRequest *requestPut = [_sut requestWithMethod:@"PUT" path:@"Another/acas" parameters:nil]; - NSURLRequest *requestPost = [_sut requestWithMethod:@"POST" path:nil parameters:nil]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestGet - completion:nil]]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPut - completion:nil]]; - [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPost - completion:nil]]; - assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(3)); - NSUInteger numCancelled = [_sut cancelOperationsWithPath:@"Another/acas" method:@"PUT"]; - assertThatUnsignedInt(numCancelled, equalToUnsignedInt(1)); -} - -#pragma mark - Operation Testing - @end diff --git a/Support/HockeySDKTests/BITHockeyAppClientTests.m b/Support/HockeySDKTests/BITHockeyAppClientTests.m new file mode 100644 index 0000000000..14bf8792e5 --- /dev/null +++ b/Support/HockeySDKTests/BITHockeyAppClientTests.m @@ -0,0 +1,231 @@ +// +// BITHockeyAppClientTests +// HockeySDKTests +// +// Created by Stephan Diederich on 06.09.13. +// +// + +#import + +#define HC_SHORTHAND +#import + +#define MOCKITO_SHORTHAND +#import + +#import "HockeySDK.h" +#import "BITHockeyAppClient.h" +#import "BITHTTPOperation.h" +#import "BITTestHelper.h" + +@interface BITHockeyAppClientTests : SenTestCase +@end + +@implementation BITHockeyAppClientTests { + BITHockeyAppClient *_sut; +} + +- (void)setUp { + [super setUp]; + + _sut = [[BITHockeyAppClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://bitbaseurl.com"]]; +} + +- (void)tearDown { + [_sut cancelOperationsWithPath:nil method:nil]; + _sut = nil; + + [super tearDown]; +} + +#pragma mark - Setup helpers +- (NSDictionary *)jsonFromFixture:(NSString *)fixture { + NSString *dataString = [BITTestHelper jsonFixture:fixture]; + + NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding]; + NSError *error = nil; + NSDictionary *json = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; + + return json; +} + +#pragma mark - Setup Tests +- (void) testThatItInstantiates { + STAssertNotNil(_sut, @"Should be there"); +} + +#pragma mark - Networking base tests +- (void) testThatURLRequestHasBaseURLSet { + _sut.baseURL = [NSURL URLWithString:@"http://myserver.com"]; + NSMutableURLRequest *request = [_sut requestWithMethod:@"GET" path:nil parameters:nil]; + assertThat(request.URL, equalTo([NSURL URLWithString:@"http://myserver.com/"])); +} + +- (void) testThatURLRequestHasPathAppended { + _sut.baseURL = [NSURL URLWithString:@"http://myserver.com"]; + NSMutableURLRequest *request = [_sut requestWithMethod:@"GET" path:@"projects" parameters:nil]; + assertThat(request.URL, equalTo([NSURL URLWithString:@"http://myserver.com/projects"])); +} + +- (void) testThatURLRequestHasMethodSet { + NSMutableURLRequest *request = [_sut requestWithMethod:@"POST" path:nil parameters:nil]; + + assertThat(request.HTTPMethod, equalTo(@"POST")); +} + +- (void) testThatOperationHasURLRequestSet { + _sut.baseURL = [NSURL URLWithString:@"http://myserver.com"]; + NSURLRequest *r = [_sut requestWithMethod:@"PUT" path:@"x" parameters:nil]; + BITHTTPOperation *op = [_sut operationWithURLRequest:r + completion:nil]; + assertThat(op.URLRequest, equalTo(r)); +} + +- (void) testThatURLRequestHasParametersInGetAppended { + NSDictionary *parameters = @{ + @"email" : @"peter@pan.de", + @"push" : @"pop", + }; + NSMutableURLRequest *request = [_sut requestWithMethod:@"GET" + path:@"something" + parameters:parameters]; + NSURL *url = request.URL; + NSString *params = [url query]; + NSArray *paramPairs = [params componentsSeparatedByString:@"&"]; + assertThat(paramPairs, hasCountOf(2)); + + NSMutableDictionary *dict = [NSMutableDictionary new]; + for(NSString *paramPair in paramPairs) { + NSArray *a = [paramPair componentsSeparatedByString:@"="]; + assertThat(a, hasCountOf(2)); + dict[a[0]] = a[1]; + } + assertThat(dict, equalTo(parameters)); +} + +- (void) testThatURLRequestHasParametersInPostInTheBody { + //pending +} + +#pragma mark - Convenience methods +- (void) testThatGetPathCreatesAndEnquesAnOperation { + assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(0)); + [given([_sut operationWithURLRequest:(id)anything() + completion:nil]) willReturn:[NSOperation new]]; + + [_sut getPath:@"endpoint" + parameters:nil + completion:nil]; + assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(1)); +} + +- (void) testThatPostPathCreatesAndEnquesAnOperation { + assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(0)); + [given([_sut operationWithURLRequest:nil + completion:nil]) willReturn:[NSOperation new]]; + + [_sut postPath:@"endpoint" + parameters:nil + completion:nil]; + assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(1)); +} + +#pragma mark - Completion Tests +- (void) testThatCompletionIsCalled { + //TODO +} + +#pragma mark - HTTPOperation enqueuing / cancellation +- (void) testThatOperationIsQueued { + assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(0)); + [_sut.operationQueue setSuspended:YES]; + BITHTTPOperation *op = [BITHTTPOperation new]; + [_sut enqeueHTTPOperation:op]; + + assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(1)); +} + +- (void) testThatOperationCancellingMatchesAllOperationsWithNilMethod { + [_sut.operationQueue setSuspended:YES]; + NSURLRequest *requestGet = [_sut requestWithMethod:@"GET" path:nil parameters:nil]; + NSURLRequest *requestPut = [_sut requestWithMethod:@"PUT" path:nil parameters:nil]; + NSURLRequest *requestPost = [_sut requestWithMethod:@"POST" path:nil parameters:nil]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestGet + completion:nil]]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPut + completion:nil]]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPost + completion:nil]]; + assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(3)); + NSUInteger numCancelled = [_sut cancelOperationsWithPath:nil method:nil]; + assertThatUnsignedInt(numCancelled, equalToUnsignedInt(3)); +} + +- (void) testThatOperationCancellingMatchesAllOperationsWithNilPath { + [_sut.operationQueue setSuspended:YES]; + NSURLRequest *requestGet = [_sut requestWithMethod:@"GET" path:@"test" parameters:nil]; + NSURLRequest *requestPut = [_sut requestWithMethod:@"PUT" path:@"Another/acas" parameters:nil]; + NSURLRequest *requestPost = [_sut requestWithMethod:@"POST" path:nil parameters:nil]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestGet + completion:nil]]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPut + completion:nil]]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPost + completion:nil]]; + assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(3)); + NSUInteger numCancelled = [_sut cancelOperationsWithPath:nil method:nil]; + assertThatUnsignedInt(numCancelled, equalToUnsignedInt(3)); +} + + +- (void) testThatOperationCancellingMatchesAllOperationsWithSetPath { + NSURLRequest *requestGet = [_sut requestWithMethod:@"GET" path:@"test" parameters:nil]; + NSURLRequest *requestPut = [_sut requestWithMethod:@"PUT" path:@"Another/acas" parameters:nil]; + NSURLRequest *requestPost = [_sut requestWithMethod:@"POST" path:nil parameters:nil]; + [_sut.operationQueue setSuspended:YES]; + + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestGet + completion:nil]]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPut + completion:nil]]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPost + completion:nil]]; + assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(3)); + NSUInteger numCancelled = [_sut cancelOperationsWithPath:@"Another/acas" method:nil]; + assertThatUnsignedInt(numCancelled, equalToUnsignedInt(1)); +} + +- (void) testThatOperationCancellingMatchesAllOperationsWithSetMethod { + NSURLRequest *requestGet = [_sut requestWithMethod:@"GET" path:@"test" parameters:nil]; + NSURLRequest *requestPut = [_sut requestWithMethod:@"PUT" path:@"Another/acas" parameters:nil]; + NSURLRequest *requestPost = [_sut requestWithMethod:@"POST" path:nil parameters:nil]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestGet + completion:nil]]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPut + completion:nil]]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPost + completion:nil]]; + assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(3)); + NSUInteger numCancelled = [_sut cancelOperationsWithPath:nil method:@"POST"]; + assertThatUnsignedInt(numCancelled, equalToUnsignedInt(1)); +} + +- (void) testThatOperationCancellingMatchesAllOperationsWithSetMethodAndPath { + NSURLRequest *requestGet = [_sut requestWithMethod:@"GET" path:@"test" parameters:nil]; + NSURLRequest *requestPut = [_sut requestWithMethod:@"PUT" path:@"Another/acas" parameters:nil]; + NSURLRequest *requestPost = [_sut requestWithMethod:@"POST" path:nil parameters:nil]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestGet + completion:nil]]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPut + completion:nil]]; + [_sut enqeueHTTPOperation:[_sut operationWithURLRequest:requestPost + completion:nil]]; + assertThatUnsignedInt(_sut.operationQueue.operationCount, equalToUnsignedInt(3)); + NSUInteger numCancelled = [_sut cancelOperationsWithPath:@"Another/acas" method:@"PUT"]; + assertThatUnsignedInt(numCancelled, equalToUnsignedInt(1)); +} + +#pragma mark - Operation Testing + +@end