diff --git a/.travis.yml b/.travis.yml index fda3638a..20ce53e4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c -osx_image: xcode8 +osx_image: xcode8.3 env: global: @@ -8,11 +8,15 @@ env: - CONFIGURATION="DEBUG" matrix: + - SCHEME="HockeySDK" DESTINATION="OS=8.1,name=iPad Air" RUN_TESTS="YES" + - SCHEME="HockeySDK" DESTINATION="OS=8.2,name=iPhone 6 Plus" RUN_TESTS="YES" + - SCHEME="HockeySDK" DESTINATION="OS=8.3,name=iPad 2" RUN_TESTS="YES" + - SCHEME="HockeySDK" DESTINATION="OS=8.4,name=iPhone 4s" RUN_TESTS="YES" - SCHEME="HockeySDK" DESTINATION="OS=9.0,name=iPad Air" RUN_TESTS="YES" - SCHEME="HockeySDK" DESTINATION="OS=9.1,name=iPhone 6 Plus" RUN_TESTS="YES" - - SCHEME="HockeySDK" DESTINATION="OS=9.2,name=iPad Pro" RUN_TESTS="YES" - - SCHEME="HockeySDK" DESTINATION="OS=9.3,name=iPhone 6s" RUN_TESTS="YES" - - SCHEME="HockeySDK Framework" DESTINATION="platform=iOS Simulator,OS=9.3,name=iPhone 6" RUN_TESTS="YES" + - SCHEME="HockeySDK" DESTINATION="OS=10.2,name=iPad Pro (9.7-inch)" RUN_TESTS="YES" + - SCHEME="HockeySDK" DESTINATION="OS=10.3,name=iPhone 6s" RUN_TESTS="YES" + - SCHEME="HockeySDK Framework" DESTINATION="platform=iOS Simulator,OS=10.3,name=iPhone 6" RUN_TESTS="YES" - SCHEME="HockeySDK Distribution" RUN_TESTS="NO" LINT="YES" before_install: diff --git a/Classes/BITAppStoreHeader.h b/Classes/BITAppStoreHeader.h index b08ada49..19b10336 100644 --- a/Classes/BITAppStoreHeader.h +++ b/Classes/BITAppStoreHeader.h @@ -35,26 +35,10 @@ #define __IPHONE_6_1 60100 #endif - -/** - * Header style depending on the iOS version - */ -typedef NS_ENUM(NSUInteger, BITAppStoreHeaderStyle) { - /** - * Default is iOS 6 style - */ - BITAppStoreHeaderStyleDefault = 0, - /** - * Draw header in the iOS 7 style - */ - BITAppStoreHeaderStyleOS7 = 1 -}; - @interface BITAppStoreHeader : UIView @property (nonatomic, copy) NSString *headerText; @property (nonatomic, copy) NSString *subHeaderText; @property (nonatomic, strong) UIImage *iconImage; -@property (nonatomic, assign) BITAppStoreHeaderStyle style; @end diff --git a/Classes/BITAppStoreHeader.m b/Classes/BITAppStoreHeader.m index f9a487e0..1d1a9bbd 100644 --- a/Classes/BITAppStoreHeader.m +++ b/Classes/BITAppStoreHeader.m @@ -60,7 +60,6 @@ - (instancetype)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { self.autoresizingMask = UIViewAutoresizingFlexibleWidth; self.backgroundColor = kWhiteBackgroundColorDefault; - self.style = BITAppStoreHeaderStyleDefault; } return self; } @@ -70,25 +69,14 @@ - (instancetype)initWithFrame:(CGRect)frame { - (void)drawRect:(CGRect)rect { CGRect bounds = self.bounds; - CGContextRef context = UIGraphicsGetCurrentContext(); - - if (self.style == BITAppStoreHeaderStyleDefault) { - // draw the gradient - NSArray *colors = [NSArray arrayWithObjects:(id)kDarkGrayColor.CGColor, (id)kLightGrayColor.CGColor, nil]; - CGGradientRef gradient = CGGradientCreateWithColors(CGColorGetColorSpace((__bridge CGColorRef)[colors objectAtIndex:0]), (__bridge CFArrayRef)colors, (CGFloat[2]){0, 1}); - CGPoint top = CGPointMake(CGRectGetMidX(bounds), bounds.size.height - 3); - CGPoint bottom = CGPointMake(CGRectGetMidX(bounds), CGRectGetMaxY(bounds)); - CGContextDrawLinearGradient(context, gradient, top, bottom, 0); - CGGradientRelease(gradient); - } else { - // draw the line - CGContextRef ctx = UIGraphicsGetCurrentContext(); - CGContextSetLineWidth(ctx, 1.0); - CGContextSetStrokeColorWithColor(ctx, kDarkGrayColor.CGColor); - CGContextMoveToPoint(ctx, 0, CGRectGetMaxY(bounds)); - CGContextAddLineToPoint( ctx, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds)); - CGContextStrokePath(ctx); - } + + // draw the line + CGContextRef ctx = UIGraphicsGetCurrentContext(); + CGContextSetLineWidth(ctx, 1.0); + CGContextSetStrokeColorWithColor(ctx, kDarkGrayColor.CGColor); + CGContextMoveToPoint(ctx, 0, CGRectGetMaxY(bounds)); + CGContextAddLineToPoint( ctx, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds)); + CGContextStrokePath(ctx); // icon [_iconImage drawAtPoint:CGPointMake(kImageLeftMargin, kImageTopMargin)]; @@ -98,8 +86,7 @@ - (void)drawRect:(CGRect)rect { - (void)layoutSubviews { - if (self.style == BITAppStoreHeaderStyleOS7) - self.backgroundColor = kWhiteBackgroundColorOS7; + self.backgroundColor = kWhiteBackgroundColorOS7; [super layoutSubviews]; @@ -151,10 +138,7 @@ - (void)setIconImage:(UIImage *)anIconImage { // scale, make borders and reflection _iconImage = bit_imageToFitSize(anIconImage, CGSizeMake(kImageHeight, kImageHeight), YES); - CGFloat radius = kImageBorderRadius; - if (self.style == BITAppStoreHeaderStyleOS7) - radius = kImageBorderRadiusiOS7; - _iconImage = bit_roundedCornerImage(_iconImage, radius, 0.0); + _iconImage = bit_roundedCornerImage(_iconImage, kImageBorderRadiusiOS7, 0.0); [self setNeedsDisplay]; } diff --git a/Classes/BITApplication.m b/Classes/BITApplication.m index e1ea1afe..e3104f36 100755 --- a/Classes/BITApplication.m +++ b/Classes/BITApplication.m @@ -5,7 +5,6 @@ @implementation BITApplication /// /// Adds all members of this class to a dictionary -/// @param dictionary to which the members of this class will be added. /// - (NSDictionary *)serializeToDictionary { NSMutableDictionary *dict = [super serializeToDictionary].mutableCopy; diff --git a/Classes/BITAuthenticationViewController.m b/Classes/BITAuthenticationViewController.m index 687ab947..b6ccc69f 100644 --- a/Classes/BITAuthenticationViewController.m +++ b/Classes/BITAuthenticationViewController.m @@ -207,6 +207,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N if (0 == [indexPath row]) { textField.placeholder = BITHockeyLocalizedString(@"HockeyAuthenticationViewControllerEmailPlaceholder"); + textField.accessibilityHint = BITHockeyLocalizedString(@"HockeyAccessibilityHintRequired"); textField.text = self.email; _emailField = textField; diff --git a/Classes/BITBase.m b/Classes/BITBase.m index d3a93557..efb54b7e 100644 --- a/Classes/BITBase.m +++ b/Classes/BITBase.m @@ -5,7 +5,7 @@ @implementation BITBase /// /// Adds all members of this class to a dictionary -/// @param dictionary to which the members of this class will be added. +/// @returns dictionary to which the members of this class will be added. /// - (NSDictionary *)serializeToDictionary { NSMutableDictionary *dict = [super serializeToDictionary].mutableCopy; diff --git a/Classes/BITChannelPrivate.h b/Classes/BITChannelPrivate.h index 0b35fc8c..d81c6b10 100644 --- a/Classes/BITChannelPrivate.h +++ b/Classes/BITChannelPrivate.h @@ -82,7 +82,6 @@ FOUNDATION_EXPORT NSString *const BITChannelBlockedNotification; /** * A C function that serializes a given dictionary to JSON and appends it to a char string * - * @param dictionary A dictionary which will be serialized to JSON and then appended to the string. * @param string The C string which the dictionary's JSON representation will be appended to. */ void bit_appendStringToSafeJsonStream(NSString *string, char *__nonnull*__nonnull jsonStream); @@ -90,7 +89,7 @@ void bit_appendStringToSafeJsonStream(NSString *string, char *__nonnull*__nonnul /** * Reset BITSafeJsonEventsString so we can start appending JSON dictionaries. * - * @param string The string that will be reset. + * @param jsonStream The string that will be reset. */ void bit_resetSafeJsonStream(char *__nonnull*__nonnull jsonStream); diff --git a/Classes/BITCrashManager.m b/Classes/BITCrashManager.m index d752c986..e04efa39 100644 --- a/Classes/BITCrashManager.m +++ b/Classes/BITCrashManager.m @@ -1154,10 +1154,18 @@ - (void)invokeDelayedProcessing { } } +- (void)startManagerInXamarinEnvironment { + [self startManagerInSdkEnvironment:BITSdkEnvironmentXamarin]; +} + +- (void)startManager { + [self startManagerInSdkEnvironment:BITSdkEnvironmentNative]; +} + /** * Main startup sequence initializing PLCrashReporter if it wasn't disabled */ -- (void)startManager { +- (void)startManagerInSdkEnvironment:(BITSdkEnvironment)sdkEnvironment { if (_crashManagerStatus == BITCrashManagerStatusDisabled) return; [self registerObservers]; @@ -1179,8 +1187,21 @@ - (void)startManager { symbolicationStrategy = PLCrashReporterSymbolicationStrategyAll; } - BITPLCrashReporterConfig *config = [[BITPLCrashReporterConfig alloc] initWithSignalHandlerType: signalHandlerType - symbolicationStrategy: symbolicationStrategy]; + BITPLCrashReporterConfig *config; + + switch (sdkEnvironment) { + case BITSdkEnvironmentXamarin: + config = [[BITPLCrashReporterConfig alloc] initWithSignalHandlerType: signalHandlerType + symbolicationStrategy: symbolicationStrategy + shouldRegisterUncaughtExceptionHandler:NO]; + + break; + default: + config = [[BITPLCrashReporterConfig alloc] initWithSignalHandlerType: signalHandlerType + symbolicationStrategy: symbolicationStrategy]; + break; + } + self.plCrashReporter = [[BITPLCrashReporter alloc] initWithConfiguration: config]; // Check if we previously crashed diff --git a/Classes/BITCrashManagerPrivate.h b/Classes/BITCrashManagerPrivate.h index 75ecf3ce..b8954c52 100644 --- a/Classes/BITCrashManagerPrivate.h +++ b/Classes/BITCrashManagerPrivate.h @@ -85,6 +85,8 @@ - (instancetype)initWithAppIdentifier:(NSString *)appIdentifier appEnvironment:(BITEnvironment)environment hockeyAppClient:(BITHockeyAppClient *)hockeyAppClient NS_DESIGNATED_INITIALIZER; +- (void)startManagerInXamarinEnvironment; + - (void)cleanCrashReports; - (NSString *)userIDForCrashReport; diff --git a/Classes/BITCrashReportTextFormatter.m b/Classes/BITCrashReportTextFormatter.m index 76d8c50a..3539b318 100644 --- a/Classes/BITCrashReportTextFormatter.m +++ b/Classes/BITCrashReportTextFormatter.m @@ -202,7 +202,7 @@ @implementation BITCrashReportTextFormatter * the formatted result as a string. * * @param report The report to format. - * @param textFormat The text format to use. + * @param crashReporterKey The crash reporter key. * * @return Returns the formatted result on success, or nil if an error occurs. */ @@ -628,7 +628,7 @@ + (NSString *)stringValueForCrashReport:(BITPLCrashReport *)report crashReporter * * @param regName The name of the register to use for getting the address * @param thread The crashed thread - * @param images NSArray of binary images + * @param report The crash report. * * @return The selector as a C string or NULL if no selector was found */ @@ -901,7 +901,7 @@ + (NSString *)bit_formatStackFrame: (BITPLCrashReportStackFrameInfo *) frameInfo * This is only necessary when sending crashes from the simulator as the path * then contains the username of the Mac the simulator is running on. * - * @param processPath A string containing the username + * @param path A string containing the username. * * @return An anonymized string where the real username is replaced by "USER" */ diff --git a/Classes/BITData.m b/Classes/BITData.m index 3db2ab43..958e6ac9 100644 --- a/Classes/BITData.m +++ b/Classes/BITData.m @@ -6,7 +6,7 @@ @implementation BITData /// /// Adds all members of this class to a dictionary -/// @param dictionary to which the members of this class will be added. +/// @returns dictionary to which the members of this class will be added. /// - (NSDictionary *)serializeToDictionary { NSMutableDictionary *dict = [super serializeToDictionary].mutableCopy; diff --git a/Classes/BITDevice.m b/Classes/BITDevice.m index 124d3900..54eb987a 100755 --- a/Classes/BITDevice.m +++ b/Classes/BITDevice.m @@ -5,7 +5,7 @@ @implementation BITDevice /// /// Adds all members of this class to a dictionary -/// @param dictionary to which the members of this class will be added. +/// @returns dictionary to which the members of this class will be added. /// - (NSDictionary *)serializeToDictionary { NSMutableDictionary *dict = [super serializeToDictionary].mutableCopy; diff --git a/Classes/BITDomain.m b/Classes/BITDomain.m index dbe2adf3..741156de 100644 --- a/Classes/BITDomain.m +++ b/Classes/BITDomain.m @@ -16,7 +16,7 @@ - (instancetype)init { /// /// Adds all members of this class to a dictionary -/// @param dictionary to which the members of this class will be added. +/// @returns dictionary to which the members of this class will be added. /// - (NSDictionary *)serializeToDictionary { NSMutableDictionary *dict = [super serializeToDictionary].mutableCopy; diff --git a/Classes/BITEnvelope.m b/Classes/BITEnvelope.m index fea226c5..9f5bc0e0 100644 --- a/Classes/BITEnvelope.m +++ b/Classes/BITEnvelope.m @@ -17,7 +17,7 @@ - (instancetype)init { /// /// Adds all members of this class to a dictionary -/// @param dictionary to which the members of this class will be added. +/// @returns dictionary to which the members of this class will be added. /// - (NSDictionary *)serializeToDictionary { NSMutableDictionary *dict = [super serializeToDictionary].mutableCopy; diff --git a/Classes/BITEventData.m b/Classes/BITEventData.m index 0c8dfd21..d9ce5623 100644 --- a/Classes/BITEventData.m +++ b/Classes/BITEventData.m @@ -22,7 +22,7 @@ - (instancetype)init { /// /// Adds all members of this class to a dictionary -/// @param dictionary to which the members of this class will be added. +/// @returns dictionary to which the members of this class will be added. /// - (NSDictionary *)serializeToDictionary { NSMutableDictionary *dict = [super serializeToDictionary].mutableCopy; diff --git a/Classes/BITFeedbackComposeViewController.m b/Classes/BITFeedbackComposeViewController.m index 93f0f85b..0e79cc0d 100644 --- a/Classes/BITFeedbackComposeViewController.m +++ b/Classes/BITFeedbackComposeViewController.m @@ -232,6 +232,7 @@ - (void)viewDidLoad { self.textView.backgroundColor = [UIColor whiteColor]; self.textView.returnKeyType = UIReturnKeyDefault; self.textView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; + self.textView.accessibilityHint = BITHockeyLocalizedString(@"HockeyAccessibilityHintRequired"); [self.contentViewContainer addSubview:self.textView]; @@ -499,6 +500,7 @@ - (void)addPhotoAction:(id)sender { pickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; pickerController.delegate = self; pickerController.editing = NO; + pickerController.navigationBar.barStyle = self.manager.barStyle; [self presentViewController:pickerController animated:YES completion:nil]; } @@ -662,7 +664,7 @@ - (void)editAction { BITFeedbackMessageAttachment *attachment = self.imageAttachments[self.selectedAttachmentIndex]; BITImageAnnotationViewController *annotationEditor = [[BITImageAnnotationViewController alloc ] init]; annotationEditor.delegate = self; - UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:annotationEditor]; + UINavigationController *navController = [self.manager customNavigationControllerWithRootViewController:annotationEditor presentationStyle:UIModalPresentationFullScreen]; annotationEditor.image = attachment.imageRepresentation; [self presentViewController:navController animated:YES completion:nil]; } diff --git a/Classes/BITFeedbackListViewCell.h b/Classes/BITFeedbackListViewCell.h index 8ac0da72..f8947a50 100644 --- a/Classes/BITFeedbackListViewCell.h +++ b/Classes/BITFeedbackListViewCell.h @@ -39,21 +39,6 @@ @end - -/** - * Cell style depending on the iOS version - */ -typedef NS_ENUM(NSUInteger, BITFeedbackListViewCellPresentationStyle) { - /** - * Default is iOS 6 style - */ - BITFeedbackListViewCellPresentationStyleDefault = 0, - /** - * Draw cells in the iOS 7 style - */ - BITFeedbackListViewCellPresentationStyleOS7 = 1 -}; - /** * Cell background style */ @@ -73,8 +58,6 @@ typedef NS_ENUM(NSUInteger, BITFeedbackListViewCellBackgroundStyle) { @property (nonatomic, strong) BITFeedbackMessage *message; -@property (nonatomic) BITFeedbackListViewCellPresentationStyle style; - @property (nonatomic) BITFeedbackListViewCellBackgroundStyle backgroundStyle; @property (nonatomic, strong) BITAttributedLabel *labelText; diff --git a/Classes/BITFeedbackListViewCell.m b/Classes/BITFeedbackListViewCell.m index e04b076f..f4db73bb 100644 --- a/Classes/BITFeedbackListViewCell.m +++ b/Classes/BITFeedbackListViewCell.m @@ -88,7 +88,6 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSStr if (self) { // Initialization code _backgroundStyle = BITFeedbackListViewCellBackgroundStyleNormal; - _style = BITFeedbackListViewCellPresentationStyleDefault; _message = nil; @@ -164,17 +163,9 @@ - (void) updateAttachmentFromNotification:(NSNotification *)note { - (UIColor *)backgroundColor { if (self.backgroundStyle == BITFeedbackListViewCellBackgroundStyleNormal) { - if (self.style == BITFeedbackListViewCellPresentationStyleDefault) { - return BACKGROUNDCOLOR_DEFAULT; - } else { - return BACKGROUNDCOLOR_DEFAULT_OS7; - } + return BACKGROUNDCOLOR_DEFAULT_OS7; } else { - if (self.style == BITFeedbackListViewCellPresentationStyleDefault) { - return BACKGROUNDCOLOR_ALTERNATE; - } else { - return BACKGROUNDCOLOR_ALTERNATE_OS7; - } + return BACKGROUNDCOLOR_ALTERNATE_OS7; } } @@ -274,9 +265,7 @@ - (void)layoutSubviews { self.accessoryBackgroundView.backgroundColor = [self backgroundColor]; } - if (self.style == BITFeedbackListViewCellPresentationStyleDefault) { - [self addSubview:self.accessoryBackgroundView]; - } else if (self.accessoryBackgroundView.superview){ + if (self.accessoryBackgroundView.superview){ [self.accessoryBackgroundView removeFromSuperview]; } self.contentView.backgroundColor = [self backgroundColor]; @@ -367,6 +356,11 @@ - (void)imageButtonPressed:(id)sender { } } +- (NSString *)accessibilityLabel { + NSString *messageTime = [self.labelTitle accessibilityLabel]; + NSString *messageText = [self.labelText accessibilityLabel]; + return [NSString stringWithFormat:@"%@, %@", messageTime, messageText]; +} @end diff --git a/Classes/BITFeedbackListViewController.m b/Classes/BITFeedbackListViewController.m index e4d711bd..710ca827 100644 --- a/Classes/BITFeedbackListViewController.m +++ b/Classes/BITFeedbackListViewController.m @@ -138,19 +138,7 @@ - (void)viewDidLoad { self.tableView.dataSource = self; self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; [self.tableView setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth]; - if ([self.manager isPreiOS7Environment]) { - [self.tableView setBackgroundColor:[UIColor colorWithRed:0.82 green:0.84 blue:0.84 alpha:1]]; - [self.tableView setSeparatorColor:[UIColor colorWithRed:0.79 green:0.79 blue:0.79 alpha:1]]; - } else { - // [self.tableView setBackgroundColor:[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1]]; - } - - if ([self.manager isPreiOS7Environment]) { - self.view.backgroundColor = DEFAULT_BACKGROUNDCOLOR; - } else { - // self.view.backgroundColor = DEFAULT_BACKGROUNDCOLOR_OS7; - } - + if ([UIRefreshControl class]) { self.refreshControl = [[UIRefreshControl alloc] init]; [self.refreshControl addTarget:self action:@selector(reloadList) forControlEvents:UIControlEventValueChanged]; @@ -488,17 +476,14 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { - if (![self.manager isPreiOS7Environment]) { - if (section == 0) { - return 30; - } + if (section == 0) { + return 30; } - return [super tableView:tableView heightForHeaderInSection:section]; } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { - if (![self.manager isPreiOS7Environment] && section == 0) { + if (section == 0) { UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 30.0f)]; UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(16.0f, 5.0f, self.view.frame.size.width - 32.0f, 25.0f)]; textLabel.text = [NSString stringWithFormat:BITHockeyLocalizedString(@"HockeyFeedbackListLastUpdated"), @@ -520,7 +505,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N static NSString *ButtonBottomIdentifier = @"ButtonBottomCell"; static NSString *ButtonDeleteIdentifier = @"ButtonDeleteCell"; - if (indexPath.section == 0 && indexPath.row == 1 && ![self.manager isPreiOS7Environment]) { + if (indexPath.section == 0 && indexPath.row == 1) { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:LastUpdateIdentifier]; if (!cell) { @@ -537,8 +522,6 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N return cell; } else if (indexPath.section == 0 || indexPath.section >= 2) { - CGFloat topGap = 0.0f; - UITableViewCell *cell = nil; NSString *identifier = nil; @@ -559,49 +542,24 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.textLabel.font = [UIFont systemFontOfSize:14]; cell.textLabel.numberOfLines = 0; cell.accessoryType = UITableViewCellAccessoryNone; - - if ([self.manager isPreiOS7Environment]) { - cell.selectionStyle = UITableViewCellSelectionStyleNone; - } else { - cell.selectionStyle = UITableViewCellSelectionStyleGray; - } + cell.selectionStyle = UITableViewCellSelectionStyleGray; } // button NSString *titleString = nil; - SEL actionSelector = nil; UIColor *titleColor = BIT_RGBCOLOR(35, 111, 251); if ([self.view respondsToSelector:@selector(tintColor)]){ titleColor = self.view.tintColor; } - - UIButton *button = nil; - if ([self.manager isPreiOS7Environment]) { - button = [UIButton buttonWithType:UIButtonTypeCustom]; - button.autoresizingMask = UIViewAutoresizingFlexibleWidth; - UIImage *stretchableButton = [bit_imageNamed(@"buttonRoundedRegular.png", BITHOCKEYSDK_BUNDLE) stretchableImageWithLeftCapWidth:10 topCapHeight:0]; - UIImage *stretchableHighlightedButton = [bit_imageNamed(@"buttonRoundedRegularHighlighted.png", BITHOCKEYSDK_BUNDLE) stretchableImageWithLeftCapWidth:10 topCapHeight:0]; - [button setBackgroundImage:stretchableButton forState:UIControlStateNormal]; - [button setBackgroundImage:stretchableHighlightedButton forState:UIControlStateHighlighted]; - - [[button titleLabel] setShadowOffset:CGSizeMake(0, 1)]; - [[button titleLabel] setFont:[UIFont boldSystemFontOfSize:14.0]]; - - [button setTitleColor:BUTTON_TEXTCOLOR forState:UIControlStateNormal]; - [button setTitleShadowColor:BUTTON_TEXTCOLOR_SHADOW forState:UIControlStateNormal]; - } - + if (indexPath.section == 0) { - topGap = 22; if ([self.manager numberOfMessages] == 0) { titleString = BITHockeyLocalizedString(@"HockeyFeedbackListButtonWriteFeedback"); } else { titleString = BITHockeyLocalizedString(@"HockeyFeedbackListButtonWriteResponse"); } - actionSelector = @selector(newFeedbackAction:); } else if (indexPath.section == _userButtonSection) { - topGap = 6.0f; if ([self.manager requireUserName] == BITFeedbackUserDataElementRequired || ([self.manager requireUserName] == BITFeedbackUserDataElementOptional && [self.manager userName] != nil) ) { @@ -615,65 +573,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N } else { titleString = BITHockeyLocalizedString(@"HockeyFeedbackListButtonUserDataSetEmail"); } - actionSelector = @selector(setUserDataAction:); } else { - topGap = 0.0f; - if ([self.manager isPreiOS7Environment]) { - [[button titleLabel] setShadowOffset:CGSizeMake(0, -1)]; - UIImage *stretchableDeleteButton = [bit_imageNamed(@"buttonRoundedDelete.png", BITHOCKEYSDK_BUNDLE) stretchableImageWithLeftCapWidth:10 topCapHeight:0]; - UIImage *stretchableDeleteHighlightedButton = [bit_imageNamed(@"buttonRoundedDeleteHighlighted.png", BITHOCKEYSDK_BUNDLE) stretchableImageWithLeftCapWidth:10 topCapHeight:0]; - [button setBackgroundImage:stretchableDeleteButton forState:UIControlStateNormal]; - [button setBackgroundImage:stretchableDeleteHighlightedButton forState:UIControlStateHighlighted]; - - [button setTitleColor:BUTTON_DELETE_TEXTCOLOR forState:UIControlStateNormal]; - [button setTitleShadowColor:BUTTON_DELETE_TEXTCOLOR_SHADOW forState:UIControlStateNormal]; - } - titleString = BITHockeyLocalizedString(@"HockeyFeedbackListButtonDeleteAllMessages"); titleColor = BIT_RGBCOLOR(251, 35, 35); - actionSelector = @selector(deleteAllMessagesAction:); } - - if ([self.manager isPreiOS7Environment]) { - if (titleString) - [button setTitle:titleString forState:UIControlStateNormal]; - if (actionSelector) - [button addTarget:self action:actionSelector forControlEvents:UIControlEventTouchUpInside]; - - [button setFrame: CGRectMake( 10.0f, topGap + 12.0f, cell.frame.size.width - 20.0f, 42.0f)]; - [cell addSubview:button]; - } else { - cell.textLabel.text = titleString; - cell.textLabel.textColor = titleColor; - } - - if ([self.manager isPreiOS7Environment]) { - // status label or shadow lines - if (indexPath.section == 0) { - UILabel *statusLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 6, cell.frame.size.width, 28)]; - - statusLabel.font = [UIFont systemFontOfSize:10]; - statusLabel.textColor = DEFAULT_TEXTCOLOR; - statusLabel.textAlignment = NSTextAlignmentCenter; - if ([self.manager isPreiOS7Environment]) { - statusLabel.backgroundColor = DEFAULT_BACKGROUNDCOLOR; - } else { - statusLabel.backgroundColor = DEFAULT_BACKGROUNDCOLOR_OS7; - } - statusLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth; - - statusLabel.text = [NSString stringWithFormat:BITHockeyLocalizedString(@"HockeyFeedbackListLastUpdated"), - [self.manager lastCheck] ? [self.lastUpdateDateFormatter stringFromDate:[self.manager lastCheck]] : BITHockeyLocalizedString(@"HockeyFeedbackListNeverUpdated")]; - - [cell addSubview:statusLabel]; - } else if (indexPath.section == 2) { - UIView *lineView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, 1)]; - lineView1.backgroundColor = BORDER_COLOR; - lineView1.autoresizingMask = UIViewAutoresizingFlexibleWidth; - [cell addSubview:lineView1]; - } - } - + + cell.textLabel.text = titleString; + cell.textLabel.textColor = titleColor; + return cell; } else { BITFeedbackListViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; @@ -689,13 +596,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N } else { cell.backgroundStyle = BITFeedbackListViewCellBackgroundStyleNormal; } - - if ([self.manager isPreiOS7Environment]) { - cell.style = BITFeedbackListViewCellPresentationStyleDefault; - } else { - cell.style = BITFeedbackListViewCellPresentationStyleOS7; - } - + BITFeedbackMessage *message = [self.manager messageAtIndex:indexPath.row]; cell.message = message; cell.labelText.delegate = self; @@ -733,10 +634,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N } } - if ( - [self.manager isPreiOS7Environment] || - (![self.manager isPreiOS7Environment] && indexPath.row != 0) - ) { + if (indexPath.row != 0) { UIView *lineView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, 1)]; lineView1.backgroundColor = BORDER_COLOR; lineView1.autoresizingMask = UIViewAutoresizingFlexibleWidth; @@ -790,16 +688,10 @@ - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEd - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == 0 ) { - if ([self.manager isPreiOS7Environment]) - return 87; - else - return 44; + return 44; } if (indexPath.section >= 2) { - if ([self.manager isPreiOS7Environment]) - return 65; - else - return 44; + return 44; } BITFeedbackMessage *message = [self.manager messageAtIndex:indexPath.row]; @@ -809,14 +701,12 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - if (![self.manager isPreiOS7Environment]) { - if (indexPath.section == 0) { - [self newFeedbackAction:self]; - } else if (indexPath.section == _userButtonSection) { - [self setUserDataAction:self]; - } else if (indexPath.section == _deleteButtonSection) { - [self deleteAllMessagesAction:self]; - } + if (indexPath.section == 0) { + [self newFeedbackAction:self]; + } else if (indexPath.section == _userButtonSection) { + [self setUserDataAction:self]; + } else if (indexPath.section == _deleteButtonSection) { + [self deleteAllMessagesAction:self]; } } diff --git a/Classes/BITFeedbackManager.m b/Classes/BITFeedbackManager.m index 8c7de869..d8d7e487 100644 --- a/Classes/BITFeedbackManager.m +++ b/Classes/BITFeedbackManager.m @@ -209,11 +209,7 @@ - (UIImage *)screenshot { } - (BITFeedbackListViewController *)feedbackListViewController:(BOOL)modal { - if ([self isPreiOS7Environment]) { - return [[BITFeedbackListViewController alloc] initWithModalStyle:modal]; - } else { - return [[BITFeedbackListViewController alloc] initWithStyle:UITableViewStyleGrouped modal:modal]; - } + return [[BITFeedbackListViewController alloc] initWithStyle:UITableViewStyleGrouped modal:modal]; } - (void)showFeedbackListView { @@ -1218,19 +1214,13 @@ - (void)setFeedbackObservationMode:(BITFeedbackObservationMode)feedbackObservati } - (void)setObservationModeOnScreenshotEnabled:(BOOL)observationModeOnScreenshotEnabled { - if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { - // Enable/disable screenshot notification - if (observationModeOnScreenshotEnabled) { - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenshotNotificationReceived:) name:UIApplicationUserDidTakeScreenshotNotification object:nil]; - BITHockeyLogVerbose(@"Added observer for UIApplocationUserDidTakeScreenshotNotification."); - } else { - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationUserDidTakeScreenshotNotification object:nil]; - BITHockeyLogVerbose(@"Removed observer for UIApplocationUserDidTakeScreenshotNotification."); - } + // Enable/disable screenshot notification + if (observationModeOnScreenshotEnabled) { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenshotNotificationReceived:) name:UIApplicationUserDidTakeScreenshotNotification object:nil]; + BITHockeyLogVerbose(@"Added observer for UIApplocationUserDidTakeScreenshotNotification."); } else { - if (observationModeOnScreenshotEnabled) { - BITHockeyLogWarning(@"BITFeedbackObservationModeOnScreenshot requires iOS 7 or later."); - } + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationUserDidTakeScreenshotNotification object:nil]; + BITHockeyLogVerbose(@"Removed observer for UIApplocationUserDidTakeScreenshotNotification."); } _observationModeOnScreenshotEnabled = observationModeOnScreenshotEnabled; diff --git a/Classes/BITFeedbackUserDataViewController.m b/Classes/BITFeedbackUserDataViewController.m index 84375e50..de7adc6e 100644 --- a/Classes/BITFeedbackUserDataViewController.m +++ b/Classes/BITFeedbackUserDataViewController.m @@ -190,6 +190,9 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N if ([indexPath row] == 0 && [self.manager requireUserName] != BITFeedbackUserDataElementDontShow) { textField.placeholder = BITHockeyLocalizedString(@"HockeyFeedbackUserDataNamePlaceHolder"); textField.text = self.name; + if (self.manager.requireUserName == BITFeedbackUserDataElementRequired) { + textField.accessibilityHint = BITHockeyLocalizedString(@"HockeyAccessibilityHintRequired"); + } textField.keyboardType = UIKeyboardTypeDefault; if ([self.manager requireUserEmail]) @@ -202,6 +205,9 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N } else { textField.placeholder = BITHockeyLocalizedString(@"HockeyFeedbackUserDataEmailPlaceholder"); textField.text = self.email; + if (self.manager.requireUserEmail == BITFeedbackUserDataElementRequired) { + textField.accessibilityHint = BITHockeyLocalizedString(@"HockeyAccessibilityHintRequired"); + } textField.keyboardType = UIKeyboardTypeEmailAddress; textField.returnKeyType = UIReturnKeyDone; diff --git a/Classes/BITHockeyBaseManager.m b/Classes/BITHockeyBaseManager.m index 1fc24e0c..db61a24f 100644 --- a/Classes/BITHockeyBaseManager.m +++ b/Classes/BITHockeyBaseManager.m @@ -57,13 +57,7 @@ @implementation BITHockeyBaseManager { - (instancetype)init { if ((self = [super init])) { _serverURL = BITHOCKEYSDK_URL; - - if ([self isPreiOS7Environment]) { - _barStyle = UIBarStyleBlackOpaque; - self.navigationBarTintColor = BIT_RGBCOLOR(25, 25, 25); - } else { - _barStyle = UIBarStyleDefault; - } + _barStyle = UIBarStyleDefault; _modalPresentationStyle = UIModalPresentationFormSheet; NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; @@ -94,10 +88,6 @@ - (NSString *)encodedAppIdentifier { return bit_encodeAppIdentifier(_appIdentifier); } -- (BOOL)isPreiOS7Environment { - return bit_isPreiOS7Environment(); -} - - (NSString *)getDevicePlatform { size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); @@ -184,13 +174,11 @@ - (UINavigationController *)customNavigationControllerWithRootViewController:(UI navController.navigationBar.tintColor = self.navigationBarTintColor; } else { // in case of iOS 7 we overwrite the tint color on the navigation bar - if (![self isPreiOS7Environment]) { - if ([UIWindow instancesRespondToSelector:NSSelectorFromString(@"tintColor")]) { - [navController.navigationBar setTintColor:BIT_RGBCOLOR(0, 122, 255)]; - } + if ([UIWindow instancesRespondToSelector:NSSelectorFromString(@"tintColor")]) { + [navController.navigationBar setTintColor:BIT_RGBCOLOR(0, 122, 255)]; } } - navController.modalPresentationStyle = self.modalPresentationStyle; + navController.modalPresentationStyle = modalPresentationStyle; return navController; } diff --git a/Classes/BITHockeyBaseManagerPrivate.h b/Classes/BITHockeyBaseManagerPrivate.h index 8a3470f5..b65e16e6 100644 --- a/Classes/BITHockeyBaseManagerPrivate.h +++ b/Classes/BITHockeyBaseManagerPrivate.h @@ -43,9 +43,6 @@ - (void)startManager; -/** Check if the device is running an iOS version previous to iOS 7 */ -- (BOOL)isPreiOS7Environment; - /** * by default, just logs the message * diff --git a/Classes/BITHockeyHelper.h b/Classes/BITHockeyHelper.h index f30b5391..ab11be4a 100644 --- a/Classes/BITHockeyHelper.h +++ b/Classes/BITHockeyHelper.h @@ -57,10 +57,8 @@ NSString *bit_mainBundleIdentifier(void); NSString *bit_encodeAppIdentifier(NSString *inputString); NSString *bit_appIdentifierToGuid(NSString *appIdentifier); NSString *bit_appName(NSString *placeHolderString); -NSString *bit_UUIDPreiOS6(void); NSString *bit_UUID(void); NSString *bit_appAnonID(BOOL forceNewAnonID); -BOOL bit_isPreiOS7Environment(void); BOOL bit_isPreiOS8Environment(void); BOOL bit_isPreiOS10Environment(void); BOOL bit_isAppStoreReceiptSandbox(void); diff --git a/Classes/BITHockeyHelper.m b/Classes/BITHockeyHelper.m index 01487d84..09b23187 100644 --- a/Classes/BITHockeyHelper.m +++ b/Classes/BITHockeyHelper.m @@ -210,27 +210,8 @@ void bit_fixBackupAttributeForURL(NSURL *directoryURL) { return appName; } -NSString *bit_UUIDPreiOS6(void) { - // Create a new UUID - CFUUIDRef uuidObj = CFUUIDCreate(nil); - - // Get the string representation of the UUID - NSString *resultUUID = (NSString*)CFBridgingRelease(CFUUIDCreateString(nil, uuidObj)); - CFRelease(uuidObj); - - return resultUUID; -} - NSString *bit_UUID(void) { - NSString *resultUUID = nil; - - if ([NSUUID class]) { - resultUUID = [[NSUUID UUID] UUIDString]; - } else { - resultUUID = bit_UUIDPreiOS6(); - } - - return resultUUID; + return [[NSUUID UUID] UUIDString]; } NSString *bit_appAnonID(BOOL forceNewAnonID) { @@ -283,26 +264,6 @@ void bit_fixBackupAttributeForURL(NSURL *directoryURL) { #pragma mark Environment detection -BOOL bit_isPreiOS7Environment(void) { - static BOOL isPreiOS7Environment = YES; - static dispatch_once_t checkOS; - - dispatch_once(&checkOS, ^{ - // NSFoundationVersionNumber_iOS_6_1 = 993.00 - // We hardcode this, so compiling with iOS 6 is possible while still being able to detect the correct environment - - // runtime check according to - // https://developer.apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual/TransitionGuide/SupportingEarlieriOS.html - if (floor(NSFoundationVersionNumber) <= 993.00) { - isPreiOS7Environment = YES; - } else { - isPreiOS7Environment = NO; - } - }); - - return isPreiOS7Environment; -} - BOOL bit_isPreiOS8Environment(void) { static BOOL isPreiOS8Environment = YES; static dispatch_once_t checkOS8; @@ -374,11 +335,6 @@ BITEnvironment bit_currentAppEnvironment(void) { return BITEnvironmentOther; } - // TestFlight is only supported from iOS 8 onwards, so at this point we have to be in the AppStore - if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { - return BITEnvironmentAppStore; - } - if (bit_isAppStoreReceiptSandbox()) { return BITEnvironmentTestFlight; } @@ -462,26 +418,7 @@ BOOL bit_isDebuggerAttached(void) { // Return ISO 8601 string representation of the date NSString *bit_utcDateString(NSDate *date){ static NSDateFormatter *dateFormatter; - - // NSDateFormatter is not thread-safe prior to iOS 7 - if (bit_isPreiOS7Environment()) { - NSMutableDictionary *threadDictionary = [NSThread currentThread].threadDictionary; - dateFormatter = threadDictionary[kBITUtcDateFormatter]; - - if (!dateFormatter) { - dateFormatter = [NSDateFormatter new]; - NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; - dateFormatter.locale = enUSPOSIXLocale; - dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; - dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; - threadDictionary[kBITUtcDateFormatter] = dateFormatter; - } - - NSString *dateString = [dateFormatter stringFromDate:date]; - - return dateString; - } - + static dispatch_once_t dateFormatterToken; dispatch_once(&dateFormatterToken, ^{ NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; @@ -623,13 +560,9 @@ BOOL bit_isDebuggerAttached(void) { NSString *currentBestMatch = nil; float currentBestMatchHeight = 0; float bestMatchHeight = 0; - - if (bit_isPreiOS7Environment()) { - bestMatchHeight = useiPadIcon ? (useHighResIcon ? 144 : 72) : (useHighResIcon ? 114 : 57); - } else { - bestMatchHeight = useiPadIcon ? (useHighResIcon ? 152 : 76) : 120; - } - + + bestMatchHeight = useiPadIcon ? (useHighResIcon ? 152 : 76) : 120; + for(NSString *icon in icons) { // Don't use imageNamed, otherwise unit tests won't find the fixture icon // and using imageWithContentsOfFile doesn't load @2x files with absolut paths (required in tests) diff --git a/Classes/BITHockeyManager.h b/Classes/BITHockeyManager.h index 53a14171..f7b4aac8 100644 --- a/Classes/BITHockeyManager.h +++ b/Classes/BITHockeyManager.h @@ -191,6 +191,18 @@ NS_ASSUME_NONNULL_BEGIN */ - (void)startManager; +/** + Starts the manager and runs all modules from a Xamarin environment. This is intended to be used by the HockeySDK-Xamarin. + We now need to make a difference as BITCrashManager needs to setup PLCrashReporter differently for Xamarin apps. + + @warning Do not use this API from within a native iOS app. + + Call this after configuring the manager and setting up all modules. + + @see configureWithIdentifier:delegate: + @see configureWithBetaIdentifier:liveIdentifier:delegate: + */ +- (void)startManagerInXamarinEnvironment; #pragma mark - Public Properties diff --git a/Classes/BITHockeyManager.m b/Classes/BITHockeyManager.m index 298ca813..6a596da1 100644 --- a/Classes/BITHockeyManager.m +++ b/Classes/BITHockeyManager.m @@ -52,7 +52,6 @@ bitstadium_info_t bitstadium_library_info __attribute__((section("__TEXT,__bit_h .hockey_build = BITHOCKEY_C_BUILD }; - #if HOCKEYSDK_FEATURE_CRASH_REPORTER #import "BITCrashManagerPrivate.h" #endif /* HOCKEYSDK_FEATURE_CRASH_REPORTER */ @@ -220,8 +219,16 @@ - (void)configureWithBetaIdentifier:(NSString *)betaIdentifier liveIdentifier:(N [self initializeModules]; } - - (void)startManager { + [self startManagerWithEnvironment:BITSdkEnvironmentNative]; +} + +- (void)startManagerInXamarinEnvironment { + [self startManagerWithEnvironment:BITSdkEnvironmentXamarin]; + BITHockeyLogVerbose(@"Started the BITHockeyManager with Xamarin Environment."); +} + +- (void)startManagerWithEnvironment:(BITSdkEnvironment)sdkEnvironment { if (!_validAppIdentifier) return; if (_startManagerIsInvoked) { BITHockeyLogWarning(@"[HockeySDK] Warning: startManager should only be invoked once! This call is ignored."); @@ -255,7 +262,15 @@ - (void)startManager { } #endif - [_crashManager startManager]; + // Start BITCrashManager with the environment flag to make sure we don't break NSException reporting for Xamarin. + switch (sdkEnvironment) { + case BITSdkEnvironmentXamarin: + [_crashManager startManagerInXamarinEnvironment]; + break; + default: + [_crashManager startManager]; + break; + } } #endif /* HOCKEYSDK_FEATURE_CRASH_REPORTER */ @@ -324,7 +339,6 @@ - (void)startManager { #endif /* HOCKEYSDK_FEATURE_METRICS */ } - #if HOCKEYSDK_FEATURE_UPDATES - (void)setDisableUpdateManager:(BOOL)disableUpdateManager { if (_updateManager) { diff --git a/Classes/BITImageAnnotationViewController.m b/Classes/BITImageAnnotationViewController.m index ba24fe34..c4a5493d 100644 --- a/Classes/BITImageAnnotationViewController.m +++ b/Classes/BITImageAnnotationViewController.m @@ -356,12 +356,7 @@ - (void)tapped:(UIGestureRecognizer *)tapRecognizer { if (self.navigationController.navigationBar.alpha == 0 || self.navigationController.navigationBarHidden ){ [UIView animateWithDuration:0.35f animations:^{ - - if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { - [self.navigationController setNavigationBarHidden:NO animated:NO]; - } else { - self.navigationController.navigationBar.alpha = 1.0; - } + [self.navigationController setNavigationBarHidden:NO animated:NO]; if ([self respondsToSelector:@selector(prefersStatusBarHidden)]) { [self setNeedsStatusBarAppearanceUpdate]; @@ -378,12 +373,7 @@ - (void)tapped:(UIGestureRecognizer *)tapRecognizer { }]; } else { [UIView animateWithDuration:0.35f animations:^{ - - if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { - [self.navigationController setNavigationBarHidden:YES animated:NO]; - } else { - self.navigationController.navigationBar.alpha = 0.0; - } + [self.navigationController setNavigationBarHidden:YES animated:NO]; if ([self respondsToSelector:@selector(prefersStatusBarHidden)]) { [self setNeedsStatusBarAppearanceUpdate]; diff --git a/Classes/BITInternal.m b/Classes/BITInternal.m index a6dba745..ed4d46e4 100644 --- a/Classes/BITInternal.m +++ b/Classes/BITInternal.m @@ -5,7 +5,7 @@ @implementation BITInternal /// /// Adds all members of this class to a dictionary -/// @param dictionary to which the members of this class will be added. +/// @returns dictionary to which the members of this class will be added. /// - (NSDictionary *)serializeToDictionary { NSMutableDictionary *dict = [super serializeToDictionary].mutableCopy; diff --git a/Classes/BITPersistence.m b/Classes/BITPersistence.m index 407eabdd..9ff4bac1 100644 --- a/Classes/BITPersistence.m +++ b/Classes/BITPersistence.m @@ -126,7 +126,7 @@ - (NSData *)dataAtFilePath:(NSString *)path { /** * Deletes a file at the given path. * - * @param the path to look for a file and delete it. + * @param path The path to look for a file and delete it. */ - (void)deleteFileAtPath:(NSString *)path { __weak typeof(self) weakSelf = self; diff --git a/Classes/BITPersistencePrivate.h b/Classes/BITPersistencePrivate.h index 6387a6c5..30374bed 100644 --- a/Classes/BITPersistencePrivate.h +++ b/Classes/BITPersistencePrivate.h @@ -51,7 +51,6 @@ FOUNDATION_EXPORT NSString *const BITPersistenceSuccessNotification; * Saves the bundle to disk. * * @param bundle the bundle, which should be saved to disk - * @param completionBlock a block which is executed after the bundle has been stored */ - (void)persistBundle:(NSData *)bundle; @@ -93,14 +92,14 @@ FOUNDATION_EXPORT NSString *const BITPersistenceSuccessNotification; /** * Release a requested path. This method should be called after sending a file failed. * - * @param path the path that should be available for sending again. + * @param filePath The path that should be available for sending again. */ - (void)giveBackRequestedFilePath:(NSString *)filePath; /** * Return the json data for a given path * - * @param path the path of the file + * @param filePath The path of the file * * @return a data object which contains telemetry data in json representation */ @@ -119,7 +118,7 @@ FOUNDATION_EXPORT NSString *const BITPersistenceSuccessNotification; /** * Returns a folder path for items of a given type. - * @param the type + * @param type The type * @return a folder path for items of a given type */ - (NSString *)folderPathForType:(BITPersistenceType)type; @@ -132,7 +131,7 @@ FOUNDATION_EXPORT NSString *const BITPersistenceSuccessNotification; * Creates the path for a file * The filename includes the timestamp. * - * @param the type that you want the fileURL for + * @param type The type that you want the fileURL for */ - (nullable NSString *)fileURLForType:(BITPersistenceType)type; diff --git a/Classes/BITSession.m b/Classes/BITSession.m index 30de611c..e8871bdd 100644 --- a/Classes/BITSession.m +++ b/Classes/BITSession.m @@ -5,7 +5,7 @@ @implementation BITSession /// /// Adds all members of this class to a dictionary -/// @param dictionary to which the members of this class will be added. +/// @returns dictionary to which the members of this class will be added. /// - (NSDictionary *)serializeToDictionary { NSMutableDictionary *dict = [super serializeToDictionary].mutableCopy; diff --git a/Classes/BITSessionStateData.m b/Classes/BITSessionStateData.m index df28a584..aafb40e9 100755 --- a/Classes/BITSessionStateData.m +++ b/Classes/BITSessionStateData.m @@ -19,7 +19,7 @@ - (instancetype)init { /// /// Adds all members of this class to a dictionary -/// @param dictionary to which the members of this class will be added. +/// @returns dictionary to which the members of this class will be added. /// - (NSDictionary *)serializeToDictionary { NSMutableDictionary *dict = [super serializeToDictionary].mutableCopy; diff --git a/Classes/BITStoreButton.h b/Classes/BITStoreButton.h index eb607814..1d25cf83 100644 --- a/Classes/BITStoreButton.h +++ b/Classes/BITStoreButton.h @@ -56,14 +56,10 @@ * Button style depending on the iOS version */ typedef NS_ENUM(NSUInteger, BITStoreButtonStyle) { - /** - * Default is iOS 6 style - */ - BITStoreButtonStyleDefault = 0, /** * Draw buttons in the iOS 7 style */ - BITStoreButtonStyleOS7 = 1 + BITStoreButtonStyleOS7 = 0 }; diff --git a/Classes/BITStoreButton.m b/Classes/BITStoreButton.m index 40f3484a..b19316c3 100644 --- a/Classes/BITStoreButton.m +++ b/Classes/BITStoreButton.m @@ -96,13 +96,9 @@ - (void)updateButtonAnimated:(BOOL)animated { // show white or gray text, depending on the state if (self.buttonData.isEnabled) { - if (self.style == BITStoreButtonStyleDefault) { - [self setTitleColor:BIT_RGBCOLOR(106, 106, 106) forState:UIControlStateNormal]; - } else { - [self setTitleColor:BIT_RGBCOLOR(35, 111, 251) forState:UIControlStateNormal]; - [_defaultBorderLayer setHidden:NO]; - [_inActiveBorderLayer setHidden:YES]; - } + [self setTitleColor:BIT_RGBCOLOR(35, 111, 251) forState:UIControlStateNormal]; + [_defaultBorderLayer setHidden:NO]; + [_inActiveBorderLayer setHidden:YES]; } else { [self setTitleColor:BIT_RGBCOLOR(148, 150, 151) forState:UIControlStateNormal]; if (self.style == BITStoreButtonStyleOS7) { @@ -176,24 +172,9 @@ - (instancetype)initWithPadding:(CGPoint)padding style:(BITStoreButtonStyle)styl _customPadding = padding; _style = style; - if (style == BITStoreButtonStyleDefault) { - // main gradient layer - CAGradientLayer *gradient = [CAGradientLayer layer]; - gradient.colors = @[(id)BIT_RGBCOLOR(243, 243, 243).CGColor, (id)BIT_RGBCOLOR(222, 222, 222).CGColor]; - gradient.locations = @[[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:1.0]]; - gradient.frame = CGRectMake(0.0, 0.0, CGRectGetWidth(frame), CGRectGetHeight(frame)); - gradient.cornerRadius = 2.5; - gradient.needsDisplayOnBoundsChange = YES; - [self.layer addSublayer:gradient]; - } - // border layers for more sex! _defaultBorderLayer = [CALayer layer]; - if (style == BITStoreButtonStyleDefault) { - _defaultBorderLayer.borderColor = [BIT_RGBCOLOR(191, 191, 191) CGColor]; - } else { _defaultBorderLayer.borderColor = [BIT_RGBCOLOR(35, 111, 251) CGColor]; - } _defaultBorderLayer.borderWidth = 1.0; _defaultBorderLayer.frame = CGRectMake(0.0, 0.0, CGRectGetWidth(frame), CGRectGetHeight(frame)); _defaultBorderLayer.cornerRadius = 2.5; diff --git a/Classes/BITUpdateManager.m b/Classes/BITUpdateManager.m index 7cc46055..7256d6e6 100644 --- a/Classes/BITUpdateManager.m +++ b/Classes/BITUpdateManager.m @@ -535,10 +535,7 @@ - (void)showUpdateView { BITHockeyLogDebug(@"INFO: Update view already visible, aborting"); return; } - - if ([self isPreiOS7Environment]) - self.barStyle = UIBarStyleBlack; - + BITUpdateViewController *updateViewController = [self hockeyViewController:YES]; if ([self hasNewerMandatoryVersion] || [self expiryDateReached]) { [updateViewController setMandatoryUpdate: YES]; diff --git a/Classes/BITUpdateViewController.m b/Classes/BITUpdateViewController.m index 64f81d56..a1f9be70 100644 --- a/Classes/BITUpdateViewController.m +++ b/Classes/BITUpdateViewController.m @@ -66,11 +66,7 @@ @implementation BITUpdateViewController { #pragma mark - Private - (UIColor *)backgroundColor { - if ([self.updateManager isPreiOS7Environment]) { - return BIT_RGBCOLOR(235, 235, 235); - } else { - return BIT_RGBCOLOR(255, 255, 255); - } + return BIT_RGBCOLOR(255, 255, 255); } - (void)restoreStoreButtonStateAnimated:(BOOL)animated { @@ -119,10 +115,8 @@ - (void)realignPreviousVersionButton { tableViewContentHeight += [self tableView:self.tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]]; } tableViewContentHeight += self.tableView.tableHeaderView.frame.size.height; - if (![self.updateManager isPreiOS7Environment]) { - tableViewContentHeight += self.navigationController.navigationBar.frame.size.height; - tableViewContentHeight += [UIApplication sharedApplication].statusBarFrame.size.height; - } + tableViewContentHeight += self.navigationController.navigationBar.frame.size.height; + tableViewContentHeight += [UIApplication sharedApplication].statusBarFrame.size.height; NSUInteger footerViewSize = kMinPreviousVersionButtonHeight; NSUInteger frameHeight = self.view.frame.size.height; @@ -235,11 +229,7 @@ - (void)configureWebCell:(BITWebTableViewCell *)cell forAppVersion:(BITAppVersio if ([appVersion.notes length] > 0) { cell.webViewContent = [NSString stringWithFormat:@"

%@%@
%@

%@

", [appVersion versionString], installed, dateAndSizeString, appVersion.notes]; } else { - if ([self.updateManager isPreiOS7Environment]) { - cell.webViewContent = [NSString stringWithFormat:@"
%@
", BITHockeyLocalizedString(@"UpdateNoReleaseNotesAvailable")]; - } else { - cell.webViewContent = [NSString stringWithFormat:@"
%@
", BITHockeyLocalizedString(@"UpdateNoReleaseNotesAvailable")]; - } + cell.webViewContent = [NSString stringWithFormat:@"
%@
", BITHockeyLocalizedString(@"UpdateNoReleaseNotesAvailable")]; } } else { cell.webViewContent = [NSString stringWithFormat:@"

%@%@
%@

%@

", [appVersion versionString], installed, dateAndSizeString, [appVersion notesOrEmptyString]]; @@ -312,35 +302,16 @@ - (void)viewDidLoad { [self.tableView addSubview:topView]; _appStoreHeader = [[BITAppStoreHeader alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, kAppStoreViewHeight)]; - if ([self.updateManager isPreiOS7Environment]) { - _appStoreHeader.style = BITAppStoreHeaderStyleDefault; - } else { - _appStoreHeader.style = BITAppStoreHeaderStyleOS7; - } [self updateAppStoreHeader]; NSString *iconFilename = bit_validAppIconFilename([NSBundle mainBundle], [NSBundle mainBundle]); if (iconFilename) { - BOOL addGloss = YES; - NSNumber *prerendered = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIPrerenderedIcon"]; - if (prerendered) { - addGloss = ![prerendered boolValue]; - } - - if (addGloss && [self.updateManager isPreiOS7Environment]) { - _appStoreHeader.iconImage = [self addGlossToImage:[UIImage imageNamed:iconFilename]]; - } else { - _appStoreHeader.iconImage = [UIImage imageNamed:iconFilename]; - } + _appStoreHeader.iconImage = [UIImage imageNamed:iconFilename]; } self.tableView.tableHeaderView = _appStoreHeader; - BITStoreButtonStyle buttonStyle = BITStoreButtonStyleDefault; - if (![self.updateManager isPreiOS7Environment]) { - buttonStyle = BITStoreButtonStyleOS7; - } - BITStoreButton *storeButton = [[BITStoreButton alloc] initWithPadding:CGPointMake(5, 58) style:buttonStyle]; + BITStoreButton *storeButton = [[BITStoreButton alloc] initWithPadding:CGPointMake(5, 58) style:BITStoreButtonStyleOS7]; storeButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; storeButton.buttonDelegate = self; [self.tableView.tableHeaderView addSubview:storeButton]; diff --git a/Classes/BITUser.m b/Classes/BITUser.m index 77413da0..17effc34 100755 --- a/Classes/BITUser.m +++ b/Classes/BITUser.m @@ -5,7 +5,7 @@ @implementation BITUser /// /// Adds all members of this class to a dictionary -/// @param dictionary to which the members of this class will be added. +/// @returns dictionary to which the members of this class will be added. /// - (NSDictionary *)serializeToDictionary { NSMutableDictionary *dict = [super serializeToDictionary].mutableCopy; diff --git a/Classes/HockeySDKEnums.h b/Classes/HockeySDKEnums.h index 9caa3dbc..180ddc8f 100644 --- a/Classes/HockeySDKEnums.h +++ b/Classes/HockeySDKEnums.h @@ -184,4 +184,18 @@ typedef NS_ENUM(NSInteger, BITHockeyErrorReason) { BITHockeyErrorUnknown }; +/** + * SDK Environment + */ +typedef NS_ENUM (NSUInteger, BITSdkEnvironment) { + /** + * A regular native iOS environment + */ + BITSdkEnvironmentNative = 0, + /** + * A xamarin environment + */ + BITSdkEnvironmentXamarin = 1 +}; + #endif /* HockeySDK_HockeyEnums_h */ diff --git a/HockeySDK-Source.podspec b/HockeySDK-Source.podspec index 7371e7b6..a2df00de 100644 --- a/HockeySDK-Source.podspec +++ b/HockeySDK-Source.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'HockeySDK-Source' - s.version = '4.1.4' + s.version = '4.1.5' s.summary = 'Collect live crash reports, get feedback from your users, distribute your betas, and analyze your test coverage with HockeyApp.' s.description = <<-DESC @@ -18,14 +18,14 @@ Pod::Spec.new do |s| s.author = { 'Microsoft' => 'support@hockeyapp.net' } s.source = { :git => 'https://github.com/bitstadium/HockeySDK-iOS.git', :tag => s.version.to_s } - s.platform = :ios, '6.0' + s.platform = :ios, '7.0' s.source_files = 'Classes' s.requires_arc = true s.frameworks = 'AssetsLibrary', 'CoreGraphics', 'CoreTelephony', 'CoreText', 'MobileCoreServices', 'Photos', 'QuartzCore', 'QuickLook', 'Security', 'SystemConfiguration', 'UIKit' s.libraries = 'c++', 'z' s.vendored_frameworks = 'Vendor/CrashReporter.framework' - s.pod_target_xcconfig = {'GCC_PREPROCESSOR_DEFINITIONS' => %{$(inherited) BITHOCKEY_VERSION="@\\"#{s.version}\\"" BITHOCKEY_C_VERSION="\\"#{s.version}\\"" BITHOCKEY_BUILD="@\\"99\\"" BITHOCKEY_C_BUILD="\\"99\\""} } + s.pod_target_xcconfig = {'GCC_PREPROCESSOR_DEFINITIONS' => %{$(inherited) BITHOCKEY_VERSION="@\\"#{s.version}\\"" BITHOCKEY_C_VERSION="\\"#{s.version}\\"" BITHOCKEY_BUILD="@\\"100\\"" BITHOCKEY_C_BUILD="\\"100\\""} } s.resource_bundle = { 'HockeySDKResources' => ['Resources/*.png', 'Resources/*.lproj'] } s.preserve_paths = 'Resources', 'Support' s.private_header_files = 'Classes/*Private.h' diff --git a/HockeySDK.podspec b/HockeySDK.podspec index 9fa06ec3..92a0ec46 100644 --- a/HockeySDK.podspec +++ b/HockeySDK.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'HockeySDK' - s.version = '4.1.4' + s.version = '4.1.5' s.summary = 'Collect live crash reports, get feedback from your users, distribute your betas, and analyze your test coverage with HockeyApp.' s.description = <<-DESC @@ -17,7 +17,7 @@ Pod::Spec.new do |s| s.license = { :type => 'MIT', :file => 'HockeySDK-iOS/LICENSE' } s.author = { 'Microsoft' => 'support@hockeyapp.net' } - s.platform = :ios, '6.0' + s.platform = :ios, '7.0' s.requires_arc = true s.preserve_path = 'HockeySDK-iOS/README.md' @@ -43,7 +43,7 @@ Pod::Spec.new do |s| s.subspec 'DefaultLib' do |ss| ss.resource_bundle = { 'HockeySDKResources' => ['HockeySDK-iOS/HockeySDK.embeddedframework/HockeySDKResources.bundle/*.png', 'HockeySDK-iOS/HockeySDK.embeddedframework/HockeySDKResources.bundle/*.lproj'] } - ss.frameworks = 'AssetsLibrary', 'CoreGraphics', 'CoreText', 'CoreTelephony', 'MobileCoreServices', 'QuartzCore', 'QuickLook', 'UIKit' + ss.frameworks = 'CoreGraphics', 'CoreText', 'CoreTelephony', 'MobileCoreServices', 'QuartzCore', 'QuickLook', 'UIKit' ss.libraries = 'z' ss.vendored_frameworks = 'HockeySDK-iOS/HockeySDK.embeddedframework/HockeySDK.framework' end diff --git a/README.md b/README.md index bbc688ee..84073580 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Version](http://cocoapod-badges.herokuapp.com/v/HockeySDK/badge.png)](http://cocoadocs.org/docsets/HockeySDK) -## Version 4.1.4 +## Version 4.1.5 -- [Changelog](http://www.hockeyapp.net/help/sdk/ios/4.1.4/docs/docs/Changelog.html) +- [Changelog](http://www.hockeyapp.net/help/sdk/ios/4.1.5/docs/docs/Changelog.html) **NOTE** If your are using the binary integration of our SDK, make sure that the `HockeySDKResources.bundle` inside the `HockeySDK.embeddedframework`-folder has been added to your application. @@ -62,8 +62,7 @@ This document contains the following sections: ## 1. Requirements 1. We assume that you already have a project in Xcode and that this project is opened in Xcode 7 or later. -2. The SDK supports iOS 6.0 and later. -3. Xcode 8 +2. The SDK supports iOS 7.0 and later. ## 2. Setup @@ -653,7 +652,7 @@ To check if data is send properly to HockeyApp and also see some additional SDK ## 4. Documentation -Our documentation can be found on [HockeyApp](http://hockeyapp.net/help/sdk/ios/4.1.4/index.html). +Our documentation can be found on [HockeyApp](http://hockeyapp.net/help/sdk/ios/4.1.5/index.html). ## 5.Troubleshooting @@ -667,7 +666,7 @@ Our documentation can be found on [HockeyApp](http://hockeyapp.net/help/sdk/ios/ Make sure none of the following files are copied into your app bundle, check under app target, `Build Phases`, `Copy Bundle Resources` or in the `.app` bundle after building: - `HockeySDK.framework` (except if you build a dynamic framework version of the SDK yourself!) - - `de.bitstadium.HockeySDK-iOS-4.1.4.docset` + - `de.bitstadium.HockeySDK-iOS-4.1.5.docset` ### Feature are not working as expected diff --git a/Resources/de.lproj/HockeySDK.strings b/Resources/de.lproj/HockeySDK.strings index f4051c9f..800819a9 100644 --- a/Resources/de.lproj/HockeySDK.strings +++ b/Resources/de.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "Autorisierungsfehler. Bitte wenden Sie sich an den Entwickler dieser App."; "HockeyAuthenticationWrongEmailPassword" = "E-Mail-Adresse oder Kennwort sind nicht korrekt. Bitte Eingaben prüfen und erneut versuchen."; "HockeyAuthenticationAuthSecretMissing" = "Das HockeyApp „Authorization Secret“ wurde nicht hinterlegt. Bitte wenden Sie sich an den Entwickler dieser App."; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "Erforderlich"; diff --git a/Resources/en.lproj/HockeySDK.strings b/Resources/en.lproj/HockeySDK.strings index 7e6abaf1..a5a97349 100644 --- a/Resources/en.lproj/HockeySDK.strings +++ b/Resources/en.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "Authorization error. Please contact the developer of this app."; "HockeyAuthenticationWrongEmailPassword" = "You have entered an invalid email or password. Please check your input and try again."; "HockeyAuthenticationAuthSecretMissing" = "The HockeySDK authorization secret has not been set. Please contact the developer of this app."; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "Required"; diff --git a/Resources/es.lproj/HockeySDK.strings b/Resources/es.lproj/HockeySDK.strings index 40c6a570..254a778a 100644 --- a/Resources/es.lproj/HockeySDK.strings +++ b/Resources/es.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "Error de autorización. Póngase en contacto con el desarrollador de la app."; "HockeyAuthenticationWrongEmailPassword" = "Ha escrito un correo o contraseña incorrectos. Compruébelos y vuelva a intentarlo."; "HockeyAuthenticationAuthSecretMissing" = "El “authorization secret” de HockeySDK no está definido. Póngase en contacto con el desarrollador de la app."; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "Obligatorio"; diff --git a/Resources/fa.lproj/HockeySDK.strings b/Resources/fa.lproj/HockeySDK.strings index 29311265..db92f58e 100644 --- a/Resources/fa.lproj/HockeySDK.strings +++ b/Resources/fa.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "خطای مجوز. لطفا با توسعه دهنده این برنامه تماس بگیرید."; "HockeyAuthenticationWrongEmailPassword" = "شما یک پست الکترونیک و یا رمز عبور نامعتبر وارد کرده اید. لطفا ورودی های خود را بررسی و دوباره امتحان کنید."; "HockeyAuthenticationAuthSecretMissing" = "مجوز مخفی HockeySDK تنظیم نشده است. لطفا با توسعه دهنده این برنامه تماس بگیرید."; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "مورد نیاز"; diff --git a/Resources/fr.lproj/HockeySDK.strings b/Resources/fr.lproj/HockeySDK.strings index 76d9e2a5..d6fbf031 100644 --- a/Resources/fr.lproj/HockeySDK.strings +++ b/Resources/fr.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "Erreur d'autorisation. Contactez le développeur de l'application."; "HockeyAuthenticationWrongEmailPassword" = "L'adresse électronique ou le mot de passe sont incorrects. Vérifiez votre saisie et réessayez."; "HockeyAuthenticationAuthSecretMissing" = "« HockeySDK authorization secret » non défini. Contactez le développeur de l'application."; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "Requis"; diff --git a/Resources/hr.lproj/HockeySDK.strings b/Resources/hr.lproj/HockeySDK.strings index 27af3c41..5c57d1bd 100644 --- a/Resources/hr.lproj/HockeySDK.strings +++ b/Resources/hr.lproj/HockeySDK.strings @@ -275,3 +275,6 @@ "HockeyAuthenticationContactDeveloper" = "Pogreška u autoriziranju. Molimo Vas kontaktirajte razvojnog programera ove aplikacije."; "HockeyAuthenticationWrongEmailPassword" = "E-mail adresa ili lozinka koju ste unijeli nije ispravna. Molimo Vas provjerite Vaš unos i pokušajte iznova."; "HockeyAuthenticationAuthSecretMissing" = "HockeySDK \"authorization secret\" nije postavljen. Molimo Vas kontaktirajte razvojnog programera ove aplikacije."; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "Obavezno"; diff --git a/Resources/hu.lproj/HockeySDK.strings b/Resources/hu.lproj/HockeySDK.strings index bea21b6b..df4db2a9 100644 --- a/Resources/hu.lproj/HockeySDK.strings +++ b/Resources/hu.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "Hitelesítési hiba. Kérjük, lépjen kapcsolatba az alkalmazás fejlesztőjével."; "HockeyAuthenticationWrongEmailPassword" = "Érvénytelen e-mail címet vagy jelszót adott meg. Kérjük, ellenőrizze a bevitelt és adja meg az adatokat újra."; "HockeyAuthenticationAuthSecretMissing" = "A HockeySDK \"authorization secret\" még nincs beállítva. Kérjük, lépjen kapcsolatba az alkalmazás fejlesztőjével."; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "Szükséges mező"; diff --git a/Resources/it.lproj/HockeySDK.strings b/Resources/it.lproj/HockeySDK.strings index b88dae6e..11db7c95 100644 --- a/Resources/it.lproj/HockeySDK.strings +++ b/Resources/it.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "Errore di autorizzazione. Contatta lo sviluppatore di questa app."; "HockeyAuthenticationWrongEmailPassword" = "L'indirizzo e-mail o la password non sono corretti. Controlla i dati inseriti e riprova."; "HockeyAuthenticationAuthSecretMissing" = "Non è stato impostato l'\"authorization secret\" HockeySDK. Contatta lo sviluppatore di questa app."; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "Richiesto"; diff --git a/Resources/ja.lproj/HockeySDK.strings b/Resources/ja.lproj/HockeySDK.strings index 1fb856d6..fe76bd9a 100644 --- a/Resources/ja.lproj/HockeySDK.strings +++ b/Resources/ja.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "認証エラー。このAppのデベロッパに連絡してください。"; "HockeyAuthenticationWrongEmailPassword" = "無効なメールアドレスまたはパスワードが入力されました。入力を確認し、やり直してください。"; "HockeyAuthenticationAuthSecretMissing" = "HockeySDK “authorization secret” が設定されていません。このAppのデベロッパに連絡してください。"; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "必填"; diff --git a/Resources/nb.lproj/HockeySDK.strings b/Resources/nb.lproj/HockeySDK.strings index ead5e90c..71aa51f2 100644 --- a/Resources/nb.lproj/HockeySDK.strings +++ b/Resources/nb.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "Autentiseringsfeil, vennligst kontakt utvikleren av appen."; "HockeyAuthenticationWrongEmailPassword" = "Du har ikke oppgitt en gyldig e-postadresse eller passord, kontroller opplysningene og prøv igjen."; "HockeyAuthenticationAuthSecretMissing" = "HockeySDKet mangler autentiseringshemmelighet, vennligst kontakt utvikleren av appen."; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "Påkrevd"; diff --git a/Resources/nl.lproj/HockeySDK.strings b/Resources/nl.lproj/HockeySDK.strings index 5c77f2a2..9c92f67e 100644 --- a/Resources/nl.lproj/HockeySDK.strings +++ b/Resources/nl.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "Fout bij identiteitscontrole. Neem contact op met de ontwikkelaar van deze app."; "HockeyAuthenticationWrongEmailPassword" = "U hebt een ongeldig e-mailadres of wachtwoord ingevoerd. Controleer uw gegevens en probeer opnieuw."; "HockeyAuthenticationAuthSecretMissing" = "Het 'Authorization secret' van HockeySDK is nog niet ingesteld. Neem contact op met de ontwikkelaar van deze app."; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "Verplicht"; diff --git a/Resources/pt-PT.lproj/HockeySDK.strings b/Resources/pt-PT.lproj/HockeySDK.strings index 63b923a3..1f1edcf0 100644 --- a/Resources/pt-PT.lproj/HockeySDK.strings +++ b/Resources/pt-PT.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "Erro de autorização. Contacte o programador desta aplicação."; "HockeyAuthenticationWrongEmailPassword" = "Introduziu um e-mail ou palavra-passe inválida. Verifique e tente novamente."; "HockeyAuthenticationAuthSecretMissing" = "O \"authorization secret\" do HockeySDK não foi definido. Contacte o programador desta aplicação."; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "Necessário"; diff --git a/Resources/pt.lproj/HockeySDK.strings b/Resources/pt.lproj/HockeySDK.strings index 2651eea0..0f3141aa 100644 --- a/Resources/pt.lproj/HockeySDK.strings +++ b/Resources/pt.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "Erro de autorização. Contate o desenvolvedor deste aplicativo."; "HockeyAuthenticationWrongEmailPassword" = "Você informou um e-mail ou senha inválidos. Verifique os dados e tente novamente."; "HockeyAuthenticationAuthSecretMissing" = "O “authorization secret” do HockeySDK não foi definido. Contate o desenvolvedor deste aplicativo."; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "Necessário"; diff --git a/Resources/ru.lproj/HockeySDK.strings b/Resources/ru.lproj/HockeySDK.strings index 2ef9d0d8..518b9fe1 100644 --- a/Resources/ru.lproj/HockeySDK.strings +++ b/Resources/ru.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "Ошибка авторизации. Свяжитесь с разработчиком приложения."; "HockeyAuthenticationWrongEmailPassword" = "Вы ввели неверный email или пароль. Проверьте его правильность и попробуйте еще раз."; "HockeyAuthenticationAuthSecretMissing" = "HockeySDK authorization secret не настроен. Свяжитесь с разработчиком приложения."; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "Обязательное поле"; diff --git a/Resources/zh-Hans.lproj/HockeySDK.strings b/Resources/zh-Hans.lproj/HockeySDK.strings index d5bd8960..582a4ab9 100644 --- a/Resources/zh-Hans.lproj/HockeySDK.strings +++ b/Resources/zh-Hans.lproj/HockeySDK.strings @@ -274,3 +274,6 @@ "HockeyAuthenticationContactDeveloper" = "授权错误。请联系这个 app 开发人员。"; "HockeyAuthenticationWrongEmailPassword" = "你输入了一个无效的电子邮件或密码,请检查后再试一次。"; "HockeyAuthenticationAuthSecretMissing" = "尚未设置 HockeySDK authorization secret。请联系这个 app 的开发人员。"; + +/* Accessibility strings */ +"HockeyAccessibilityHintRequired" = "必填"; diff --git a/Support/HockeySDK.xcodeproj/project.pbxproj b/Support/HockeySDK.xcodeproj/project.pbxproj index f9780d12..fc8ddee6 100644 --- a/Support/HockeySDK.xcodeproj/project.pbxproj +++ b/Support/HockeySDK.xcodeproj/project.pbxproj @@ -1612,7 +1612,7 @@ isa = PBXProject; attributes = { LastTestingUpgradeCheck = 0600; - LastUpgradeCheck = 0820; + LastUpgradeCheck = 0830; TargetAttributes = { 1EB6173E1B0A30480035A986 = { CreatedOnToolsVersion = 6.3.1; @@ -2099,7 +2099,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = "../Resources/HockeySDK-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; "IPHONEOS_DEPLOYMENT_TARGET[arch=arm64]" = 7.0; MACOSX_DEPLOYMENT_TARGET = 10.5; RUN_CLANG_STATIC_ANALYZER = YES; @@ -2112,7 +2112,6 @@ isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - "ARCHS[sdk=iphonesimulator*]" = "$(BIT_SIM_ARCHS)"; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -2160,7 +2159,7 @@ "$(SRCROOT)/HockeySDKTests/Vendor/**", ); INFOPLIST_FILE = "HockeySDKTests/HockeySDKTests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/HockeySDKTests/Vendor/**", @@ -2364,7 +2363,6 @@ 1E5954F015B6F24A00A03429 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = "$(BIT_SIM_ARCHS)"; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -2391,7 +2389,6 @@ 1E5954F115B6F24A00A03429 /* ReleaseDefault */ = { isa = XCBuildConfiguration; buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = "$(BIT_SIM_ARCHS)"; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -2469,7 +2466,7 @@ "$(SRCROOT)/HockeySDKTests/Vendor/**", ); INFOPLIST_FILE = "HockeySDKTests/HockeySDKTests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/HockeySDKTests/Vendor/**", @@ -2528,7 +2525,7 @@ "$(SRCROOT)/HockeySDKTests/Vendor/**", ); INFOPLIST_FILE = "HockeySDKTests/HockeySDKTests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/HockeySDKTests/Vendor/**", @@ -2600,7 +2597,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = "../Resources/HockeySDK-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; "IPHONEOS_DEPLOYMENT_TARGET[arch=arm64]" = 7.0; MACOSX_DEPLOYMENT_TARGET = 10.5; RUN_CLANG_STATIC_ANALYZER = YES; @@ -2612,7 +2609,6 @@ 1E7DE39119D44D88009AB8E5 /* ReleaseCrashOnly */ = { isa = XCBuildConfiguration; buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = "$(BIT_SIM_ARCHS)"; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -2690,7 +2686,7 @@ "$(SRCROOT)/HockeySDKTests/Vendor/**", ); INFOPLIST_FILE = "HockeySDKTests/HockeySDKTests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/HockeySDKTests/Vendor/**", @@ -3132,7 +3128,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = "../Resources/HockeySDK-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; "IPHONEOS_DEPLOYMENT_TARGET[arch=arm64]" = 7.0; MACOSX_DEPLOYMENT_TARGET = 10.5; RUN_CLANG_STATIC_ANALYZER = YES; @@ -3144,7 +3140,6 @@ B29855451D85EBC9007FF452 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = "$(BIT_SIM_ARCHS)"; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -3192,7 +3187,7 @@ "$(SRCROOT)/HockeySDKTests/Vendor/**", ); INFOPLIST_FILE = "HockeySDKTests/HockeySDKTests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/HockeySDKTests/Vendor/**", @@ -3418,7 +3413,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = "../Resources/HockeySDK-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; "IPHONEOS_DEPLOYMENT_TARGET[arch=arm64]" = 7.0; MACOSX_DEPLOYMENT_TARGET = 10.5; ONLY_ACTIVE_ARCH = YES; @@ -3462,7 +3457,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = "../Resources/HockeySDK-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; "IPHONEOS_DEPLOYMENT_TARGET[arch=arm64]" = 7.0; MACOSX_DEPLOYMENT_TARGET = 10.5; RUN_CLANG_STATIC_ANALYZER = YES; diff --git a/Support/HockeySDK.xcodeproj/xcshareddata/xcschemes/HockeySDK Distribution.xcscheme b/Support/HockeySDK.xcodeproj/xcshareddata/xcschemes/HockeySDK Distribution.xcscheme index 5560a6f9..0480895a 100644 --- a/Support/HockeySDK.xcodeproj/xcshareddata/xcschemes/HockeySDK Distribution.xcscheme +++ b/Support/HockeySDK.xcodeproj/xcshareddata/xcschemes/HockeySDK Distribution.xcscheme @@ -1,6 +1,6 @@ __IPHONE_7_1 - data = [[NSData alloc] initWithBase64EncodedString:@"TestData" options:0]; -#else - if ([[NSData class] respondsToSelector:@selector(initWithBase64EncodedString:options:)]) { - data = [[NSData alloc] initWithBase64EncodedString:@"TestData" options:0]; - } else { - data = [[NSData alloc] initWithBase64Encoding:@"TestData"]; - } -#endif + NSData *data = [[NSData alloc] initWithBase64EncodedString:@"TestData" options:0]; NSString* type = @"text/plain"; diff --git a/Support/HockeySDKTests/BITHockeyAppClientTests.m b/Support/HockeySDKTests/BITHockeyAppClientTests.m index c4d9cb33..ccc3c7b7 100644 --- a/Support/HockeySDKTests/BITHockeyAppClientTests.m +++ b/Support/HockeySDKTests/BITHockeyAppClientTests.m @@ -1,6 +1,6 @@ // -// BITHockeyAppClientTests -// HockeySDKTests +// BITHockeyAppClientTests.m +// HockeySDK // // Created by Stephan Diederich on 06.09.13. // diff --git a/Support/HockeySDKTests/BITHockeyHelperTests.m b/Support/HockeySDKTests/BITHockeyHelperTests.m index b106c010..3eba0594 100644 --- a/Support/HockeySDKTests/BITHockeyHelperTests.m +++ b/Support/HockeySDKTests/BITHockeyHelperTests.m @@ -1,5 +1,5 @@ // -// HockeySDKPrivateTests.m +// BITHockeyHelperTests.m // HockeySDK // // Created by Andreas Linde on 25.09.13. @@ -73,12 +73,6 @@ - (void)testAppName { assertThatBool([resultString isEqualToString:@"Placeholder"], isTrue()); } -- (void)testUUIDPreiOS6 { - NSString *resultString = bit_UUIDPreiOS6(); - assertThat(resultString, notNilValue()); - assertThatInteger([resultString length], equalToInteger(36)); -} - - (void)testUUID { NSString *resultString = bit_UUID(); assertThat(resultString, notNilValue()); diff --git a/Support/HockeySDKTests/BITKeychainUtilsTests.m b/Support/HockeySDKTests/BITKeychainUtilsTests.m index 4c80d01a..6ab74f0b 100644 --- a/Support/HockeySDKTests/BITKeychainUtilsTests.m +++ b/Support/HockeySDKTests/BITKeychainUtilsTests.m @@ -1,9 +1,9 @@ // -// BITKeychainHelperTests.m +// BITKeychainUtilsTests.m // HockeySDK // // Created by Stephan Diederich on 23.09.13. -// Copyright (c) 2013 __MyCompanyName__. All rights reserved. +// // #import diff --git a/Support/HockeySDKTests/BITStoreUpdateManagerTests.m b/Support/HockeySDKTests/BITStoreUpdateManagerTests.m index 56dec5f1..c196846d 100644 --- a/Support/HockeySDKTests/BITStoreUpdateManagerTests.m +++ b/Support/HockeySDKTests/BITStoreUpdateManagerTests.m @@ -1,6 +1,6 @@ // -// HockeySDKTests.m -// HockeySDKTests +// BITStoreUpdateManagerTests.m +// HockeySDK // // Created by Andreas Linde on 13.03.13. // diff --git a/Vendor/CrashReporter.framework/Versions/A/CrashReporter b/Vendor/CrashReporter.framework/Versions/A/CrashReporter index 0f06d85c..50844097 100644 Binary files a/Vendor/CrashReporter.framework/Versions/A/CrashReporter and b/Vendor/CrashReporter.framework/Versions/A/CrashReporter differ diff --git a/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashNamespace.h b/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashNamespace.h index eb1a4630..dba0200e 100644 --- a/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashNamespace.h +++ b/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashNamespace.h @@ -35,7 +35,7 @@ * This may be used to avoid symbol conflicts between multiple libraries * that may both incorporate PLCrashReporter. */ - #define PLCRASHREPORTER_PREFIX BIT +#define PLCRASHREPORTER_PREFIX BIT // We need two extra layers of indirection to make CPP substitute diff --git a/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashReportSystemInfo.h b/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashReportSystemInfo.h index 9ab6ef1b..b2a2146c 100644 --- a/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashReportSystemInfo.h +++ b/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashReportSystemInfo.h @@ -54,6 +54,8 @@ typedef enum { } PLCrashReportOperatingSystem; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdocumentation-deprecated-sync" /** * @ingroup constants * @@ -95,7 +97,7 @@ typedef enum { /** Unknown */ PLCrashReportArchitectureUnknown = 6 } PLCrashReportArchitecture; - +#pragma clang diagnostic pop extern PLCrashReportOperatingSystem PLCrashReportHostOperatingSystem; extern PLCrashReportArchitecture PLCrashReportHostArchitecture; @@ -138,10 +140,13 @@ extern PLCrashReportArchitecture PLCrashReportHostArchitecture; /** The operating system's build identifier (eg, 10J869). This may be unavailable, and this property will be nil. */ @property(nonatomic, readonly) NSString *operatingSystemBuild; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdocumentation-deprecated-sync" /** Architecture. @deprecated The architecture value has been deprecated in v1.1 and later crash reports. All new reports * include the CPU type as part of the crash report's machine info structure, using the PLCrashReportProcessorInfo * extensible encoding. */ @property(nonatomic, readonly) PLCrashReportArchitecture architecture; +#pragma clang diagnostic pop /** Date and time that the crash report was generated. This may be unavailable, and this property will be nil. */ @property(nonatomic, readonly) NSDate *timestamp; diff --git a/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashReporter.h b/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashReporter.h index 455c417a..68bf5a0f 100644 --- a/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashReporter.h +++ b/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashReporter.h @@ -44,7 +44,8 @@ * @param uap The crash's threads context. * @param context The API client's supplied context value. * - * @sa @ref async_safety + * @sa async_satefy + * @ref async_safety * @sa PLCrashReporter::setPostCrashCallbacks: */ typedef void (*PLCrashReporterPostCrashSignalCallback)(siginfo_t *info, ucontext_t *uap, void *context); @@ -55,7 +56,8 @@ typedef void (*PLCrashReporterPostCrashSignalCallback)(siginfo_t *info, ucontext * This structure contains callbacks supported by PLCrashReporter to allow the host application to perform * additional tasks prior to program termination after a crash has occured. * - * @sa @ref async_safety + * @sa async_satefy + * @ref async_safety */ typedef struct PLCrashReporterCallbacks { /** The version number of this structure. If not one of the defined version numbers for this type, the behavior diff --git a/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashReporterConfig.h b/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashReporterConfig.h index 82f0bd9c..15c3a24b 100644 --- a/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashReporterConfig.h +++ b/Vendor/CrashReporter.framework/Versions/A/Headers/PLCrashReporterConfig.h @@ -146,6 +146,12 @@ typedef NS_OPTIONS(NSUInteger, PLCrashReporterSymbolicationStrategy) { /** The configured symbolication strategy. */ PLCrashReporterSymbolicationStrategy _symbolicationStrategy; + + /** + * Flag indicating if the uncaughtExceptionHandler should be initialized or not. It usually is, except in a + * Xamarin environment. + */ + BOOL _shouldRegisterUncaughtExceptionHandler; } + (instancetype) defaultConfiguration; @@ -154,12 +160,19 @@ typedef NS_OPTIONS(NSUInteger, PLCrashReporterSymbolicationStrategy) { - (instancetype) initWithSignalHandlerType: (PLCrashReporterSignalHandlerType) signalHandlerType symbolicationStrategy: (PLCrashReporterSymbolicationStrategy) symbolicationStrategy; +- (instancetype) initWithSignalHandlerType: (PLCrashReporterSignalHandlerType) signalHandlerType + symbolicationStrategy: (PLCrashReporterSymbolicationStrategy) symbolicationStrategy + shouldRegisterUncaughtExceptionHandler: (BOOL) shouldRegisterUncaughtExceptionHandler; + + /** The configured signal handler type. */ @property(nonatomic, readonly) PLCrashReporterSignalHandlerType signalHandlerType; /** The configured symbolication strategy. */ @property(nonatomic, readonly) PLCrashReporterSymbolicationStrategy symbolicationStrategy; +/** Should PLCrashReporter regiser an uncaught exception handler? This is entended to be used in Xamarin apps */ +@property(nonatomic, readonly) BOOL shouldRegisterUncaughtExceptionHandler; @end diff --git a/Vendor/CrashReporter.framework/Versions/A/Resources/Info.plist b/Vendor/CrashReporter.framework/Versions/A/Resources/Info.plist index d1377f9b..99ca9259 100644 --- a/Vendor/CrashReporter.framework/Versions/A/Resources/Info.plist +++ b/Vendor/CrashReporter.framework/Versions/A/Resources/Info.plist @@ -3,7 +3,7 @@ BuildMachineOSBuild - 15G1217 + 16E195 CFBundleDevelopmentRegion English CFBundleExecutable @@ -27,16 +27,16 @@ DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild - 8C1002 + 8E2002 DTPlatformVersion GM DTSDKBuild - 16C58 + 16E185 DTSDKName macosx10.12 DTXcode - 0821 + 0832 DTXcodeBuild - 8C1002 + 8E2002 diff --git a/docs/Changelog-template.md b/docs/Changelog-template.md index b40461e5..a7030bdf 100644 --- a/docs/Changelog-template.md +++ b/docs/Changelog-template.md @@ -1,3 +1,11 @@ +## 4.1.5 + +This release officially dropps the support for iOS 6. + +- [FIX] Remove the dependency for AssetLibrary for the default subspec in our podspec [#403](https://github.com/bitstadium/HockeySDK-iOS/pull/403). Thanks to [@tschob](https://github.com/tschob) for the pointer. +- [FIX] A couple of visual bugs have been fixed [#404](https://github.com/bitstadium/HockeySDK-iOS/pull/404) thanks to [@dweston](https://github.com/dtweston). +- [IMPROVEMENT] We have improved accessibility of our feedback UI [#409](https://github.com/bitstadium/HockeySDK-iOS/pull/409) with help by [@erychagov](https://github.com/erychagov). + ## 4.1.4 - [IMPROVEMENT] Test targets won't be build in the run phase of the framework, which makes it possible to build individual configurations when using Carthage. Thanks a lot @wiedem for your contribution! [394](https://github.com/bitstadium/HockeySDK-iOS/pull/394) diff --git a/docs/index.md b/docs/index.md index 35c8a13d..7456d7de 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,8 +17,8 @@ The main SDK class is `BITHockeyManager`. It initializes all modules and provide ## Prerequisites 1. Before you integrate HockeySDK into your own app, you should add the app to HockeyApp if you haven't already. Read [this how-to](http://support.hockeyapp.net/kb/how-tos/how-to-create-a-new-app) on how to do it. -2. We also assume that you already have a project in Xcode and that this project is opened in Xcode 6. -3. The SDK supports iOS 6.0 or newer. +2. We also assume that you already have a project in Xcode and that this project is opened in Xcode 7 or later. +3. The SDK supports iOS 7.0 or newer. ## Release Notes