PerformFetchWithCompletionHandler called twice when simulating with Xcode
In Xcode 7.0.1 the "simulate background" fetch command causes performFetchWithCompletionHandler
to be triggered twice.
Is this an Xcode debugging error, or can this happen on a device running a release build of the application.
Update
Now we have Xcode 7.1.1 and still performFetchWithCompletionHandler
is called twice. Since I am not sure if this also happens "in the wild" I am keeping a state if my fetch action is already running.
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {
if (self.performingFetch) {
return completionHandler(UIBackgroundFetchResultNoData);
}
self.performingFetch = YES;
...
self.performingFetch = NO;
}
I got around this issue by declaring a static boolean in the App Delegate, and then using the boolean to get the background fetch to perform once
if (!runOnce)
{
[submission startSubmissionProcessWithCompletetionHandler:^(UIBackgroundFetchResult result){
NSDate *fetchStart = [NSDate date];
completionHandler(result);
NSDate *fetchEnd = [NSDate date];
NSTimeInterval timeElapsed = [fetchEnd timeIntervalSinceDate:fetchStart];
NSLog(@"Background Fetch Duration: %f seconds", timeElapsed);
}];
runOnce = YES;
}
else
{
completionHandler(UIBackgroundFetchResultNoData);
runOnce = NO;
}