I\'ve read in a few posts (like this one https://forums.developer.apple.com/thread/7598) that setting
application.applicationIconBadgeNumber = -1
Setting application badge to -1 indirectly with a empty local notification worked for me, but its a hack to persist notifications in tray while clearing application badge count.
if(badgeCount == 0) {
//set application badge indirectly with UILocalNotification
UILocalNotification *ln = [[UILocalNotification alloc]init];
ln.applicationIconBadgeNumber = -1;
[[UIApplication sharedApplication] presentLocalNotificationNow:ln];
}
else {
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:badgeCount];
}
Swift Version
if badgeCount == 0 {
//set application badge indirectly with UILocalNotification
var ln = UILocalNotification()
ln.applicationIconBadgeNumber = -1
UIApplication.sharedApplication().presentLocalNotificationNow(ln)
}
else {
UIApplication.sharedApplication().applicationIconBadgeNumber = badgeCount
}
Approach tested on iOS 9 and 10.