I believe the issue here is that in the check if (achievement.percentComplete < percent)
it just is too vague. My percentComplete could be 5% and my percent value could be 6% but in no means is that 100% finished. So with the way the method is above it will just show the achievement banner every time the percentComplete on the achievement is updated which is not the way Game Center should work. I also noticed that even though the banner showed as if I did unlock the achievement, I really didn't when I checked in the Game Center app. So the following method is what I did instead:
-(void) reportAchievement:(NSString*)identifier percentComplete:(float)percent
{
if (isGameCenterAvailable == NO)
return;
GKAchievement* achievement = [self getAchievement:identifier];
if (percent > achievement.percentComplete)
{
NSLog(@"new achievement %@ reported", achievement.identifier);
achievement.percentComplete = percent;
[achievement reportAchievementWithCompletionHandler:^(NSError* error) {
if (achievement.isCompleted) {
[delegate onReportAchievement:(GKAchievement*)achievement];
}
}];
[self saveAchievements];
}
}
In this code it will still report the updated value towards the 100% but it will only show a banner if the isComplete BOOL from GC is returned YES.