В каких ситуациях будет вызываться applicationWillTerminate? Например, будет ли она вызвана случайно, если в коде произошел сбой?
Apple doc расплывчата в этом, она говорит только тогда, когда система должна по какой-то причине ее прекратить.
Для приложений, которые не поддерживают фоновое исполнение или связаны против iOS 3.x или ранее, этот метод всегда вызывается, когда пользователь завершает работу приложения. Для приложений, поддерживающих фоновое выполнение, этот метод обычно не вызывается, когда пользователь выходит из приложения, потому что приложение в этом случае просто перемещается на задний план. Однако этот метод может вызываться в ситуациях, когда приложение работает в фоновом режиме (не приостановлено), и система по какой-то причине должна его прекратить.