Приложение аварийно завершает работу, иногда при запуске приложения.
Недавно мы обновили наше приложение с swift 4 до swift 4.2 с xcode 10.2, после этой миграции начались случайные сбои.
NSException: - [__ NSCFNumber objectForKey:]: нераспознанный селектор, отправленный экземпляру 0x8000000000000000
- [_ NSCoreDataTaggedObjectID objectForKey:]: нераспознанный селектор, отправленный экземпляру 0x8000000000000000
в Xcode 10.1 этой проблемы не было. в некоторых ответах на переполнение стека предлагается изменить уровень оптимизации (Optimization для оптимизации для скорости -O), но мы не уверены, что исправим эту проблему.
private var recentPresence: [String: AwUserPresenceAppStatus] = [:]
func getPresence(forUserId userId: String) -> AwUserPresenceAppStatus? {
if let recent = recentPresence[userId] {
return recent
} else if let cloned = PresenceCloner.shared.getPresence(forUserId: userId) {
return cloned
} else {
return nil
}
}
Это функция, вызывающая проблему. он принимает string
и пытается найти значение в недавнем присутствии dictionary
. и словарь, и функция хранятся внутри одноэлементного класса.
Нам интересно, почему происходят случайные сбои. мы попробовали контрольно-измерительные приборы, зомби были включены, но мы не смогли воспроизвести аварию.
Выводы:
1. All Crashes pointing the same address (0x8000000000000000)
2. iPhone XS Max Crashing a-lot.
3. Since this function inside a singleton, there is no way for deallocation.
4. Sometime dictionary can be accessed from background thread as well.
5. will this crash happens bcoz of Race Conditions.
Помощь оценена. Благодарю.