From b653019143efe362a5b1349529826d948247fb41 Mon Sep 17 00:00:00 2001 From: Murat Baysangurov Date: Tue, 1 Aug 2017 15:31:34 +0300 Subject: [PATCH 1/5] Calling getResourceValue asynchronously --- Classes/BITHockeyHelper.m | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Classes/BITHockeyHelper.m b/Classes/BITHockeyHelper.m index 796fc801fe..a40ad67bf2 100644 --- a/Classes/BITHockeyHelper.m +++ b/Classes/BITHockeyHelper.m @@ -159,13 +159,14 @@ void bit_fixBackupAttributeForURL(NSURL *directoryURL) { } if (directoryURL) { - NSError *getResourceError = nil; - NSNumber *appSupportDirExcludedValue; - - if ([directoryURL getResourceValue:&appSupportDirExcludedValue forKey:NSURLIsExcludedFromBackupKey error:&getResourceError] && appSupportDirExcludedValue) { - NSError *setResourceError = nil; - [directoryURL setResourceValue:@NO forKey:NSURLIsExcludedFromBackupKey error:&setResourceError]; - } + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSError *getResourceError = nil; + NSNumber *appSupportDirExcludedValue; + if ([directoryURL getResourceValue:&appSupportDirExcludedValue forKey:NSURLIsExcludedFromBackupKey error:&getResourceError] && appSupportDirExcludedValue) { + NSError *setResourceError = nil; + [directoryURL setResourceValue:@NO forKey:NSURLIsExcludedFromBackupKey error:&setResourceError]; + } + }); } } From 91f0258a062ad7519c7b5d95e88ce39e6db2d7a4 Mon Sep 17 00:00:00 2001 From: Murat Baysangurov Date: Tue, 1 Aug 2017 16:32:47 +0300 Subject: [PATCH 2/5] Unit tests updated for handling getResourceValue async call --- Support/HockeySDKTests/BITHockeyHelperTests.m | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/Support/HockeySDKTests/BITHockeyHelperTests.m b/Support/HockeySDKTests/BITHockeyHelperTests.m index 5679ef522f..744377319b 100644 --- a/Support/HockeySDKTests/BITHockeyHelperTests.m +++ b/Support/HockeySDKTests/BITHockeyHelperTests.m @@ -307,15 +307,23 @@ } - (BOOL)excludeAttributeIsSetForURL:(NSURL *)directoryURL { - - NSError *getResourceError = nil; - NSNumber *appSupportDirExcludedValue; - if ([directoryURL getResourceValue:&appSupportDirExcludedValue forKey:NSURLIsExcludedFromBackupKey error:&getResourceError] && appSupportDirExcludedValue) { - if ([appSupportDirExcludedValue isEqualToValue:@YES]) { - return YES; + __block BOOL result = NO; + dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSError *getResourceError = nil; + NSNumber *appSupportDirExcludedValue; + if ([directoryURL getResourceValue:&appSupportDirExcludedValue forKey:NSURLIsExcludedFromBackupKey error:&getResourceError] && appSupportDirExcludedValue) { + if ([appSupportDirExcludedValue isEqualToValue:@YES]) { + result = YES; + } } + dispatch_semaphore_signal(semaphore); + }); + while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW)){ + [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode + beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]]; } - return NO; + return result; } @end From 14b3e1c1b47f5d3ae8d715c5fcba65175d2bbd11 Mon Sep 17 00:00:00 2001 From: Murat Baysangurov Date: Wed, 2 Aug 2017 09:59:11 +0300 Subject: [PATCH 3/5] Error logging added --- Classes/BITHockeyHelper.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Classes/BITHockeyHelper.m b/Classes/BITHockeyHelper.m index a40ad67bf2..03e9499bde 100644 --- a/Classes/BITHockeyHelper.m +++ b/Classes/BITHockeyHelper.m @@ -165,6 +165,8 @@ void bit_fixBackupAttributeForURL(NSURL *directoryURL) { if ([directoryURL getResourceValue:&appSupportDirExcludedValue forKey:NSURLIsExcludedFromBackupKey error:&getResourceError] && appSupportDirExcludedValue) { NSError *setResourceError = nil; [directoryURL setResourceValue:@NO forKey:NSURLIsExcludedFromBackupKey error:&setResourceError]; + } else { + BITHockeyLogError(@"ERROR: Error while retrieving resource value: %@", getResourceError.localizedDescription); } }); } From 4d8251bc70e910ae02c2463735b6a4eb823e8ca2 Mon Sep 17 00:00:00 2001 From: Murat Baysangurov Date: Wed, 2 Aug 2017 10:09:46 +0300 Subject: [PATCH 4/5] Log setResourceValueError --- Classes/BITHockeyHelper.m | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Classes/BITHockeyHelper.m b/Classes/BITHockeyHelper.m index 03e9499bde..5383c7991c 100644 --- a/Classes/BITHockeyHelper.m +++ b/Classes/BITHockeyHelper.m @@ -164,7 +164,9 @@ void bit_fixBackupAttributeForURL(NSURL *directoryURL) { NSNumber *appSupportDirExcludedValue; if ([directoryURL getResourceValue:&appSupportDirExcludedValue forKey:NSURLIsExcludedFromBackupKey error:&getResourceError] && appSupportDirExcludedValue) { NSError *setResourceError = nil; - [directoryURL setResourceValue:@NO forKey:NSURLIsExcludedFromBackupKey error:&setResourceError]; + if(![directoryURL setResourceValue:@NO forKey:NSURLIsExcludedFromBackupKey error:&setResourceError]) { + BITHockeyLogError(@"ERROR: Error while setting resource value: %@", setResourceError.localizedDescription); + } } else { BITHockeyLogError(@"ERROR: Error while retrieving resource value: %@", getResourceError.localizedDescription); } From 31cd9beee55a4ff24683cc2c92e9aa8525bcc236 Mon Sep 17 00:00:00 2001 From: Murat Baysangurov Date: Wed, 2 Aug 2017 13:11:24 +0300 Subject: [PATCH 5/5] Semaphore replaced with expectation --- Support/HockeySDKTests/BITHockeyHelperTests.m | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Support/HockeySDKTests/BITHockeyHelperTests.m b/Support/HockeySDKTests/BITHockeyHelperTests.m index 744377319b..9b05407494 100644 --- a/Support/HockeySDKTests/BITHockeyHelperTests.m +++ b/Support/HockeySDKTests/BITHockeyHelperTests.m @@ -308,7 +308,7 @@ - (BOOL)excludeAttributeIsSetForURL:(NSURL *)directoryURL { __block BOOL result = NO; - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); + XCTestExpectation *expectation = [self expectationWithDescription:@"wait"]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSError *getResourceError = nil; NSNumber *appSupportDirExcludedValue; @@ -317,12 +317,9 @@ result = YES; } } - dispatch_semaphore_signal(semaphore); + [expectation fulfill]; }); - while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW)){ - [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode - beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]]; - } + [self waitForExpectationsWithTimeout:5 handler:nil]; return result; }