¿Cómo reconocer la forma en que la aplicación entra en segundo plano?

Por lo que sé ahora, hay dos forms en que una aplicación puede pasar a segundo plano:

1) El usuario presionó el button de inicio

2) La aplicación se ha dejado durante un time sin ninguna acción del usuario y el dispositivo se quedó dormido

Estos dos resultan en un: se llama al método applicationDidEnterBackground y el estado de la aplicación se convierte en UIApplicationState.Background . Entonces, ¿cómo sé exactamente cómo sucedió esto? Sé que es posible porque tengo una aplicación ante mis ojos que toma diferentes acciones en function de si el usuario presionó el button de inicio o no. ¿Alguna idea, muchachos?

Que yo sepa (créeme, lo he intentado ), no hay una API pública formal que te permita hacer esto. Sin embargo, encontré este repository GitHub , el file que debes mirar específicamente es el file de implementación de delegado de la aplicación .

El repo dice:

Este proyecto describe cómo detectar cuándo un usuario presiona el button de inicio para abandonar su aplicación y cuando presionan el button de locking para poner su aplicación en segundo plano.

Utiliza CSNotificationCenter para detectar notifications de Darwin.

Este usuario ha respondido dos preguntas sobre Stack Overflow relacionadas con esto, que el repository parece estar basado en:

Diferencia entre el locking de pantalla y el button de inicio presionando iOS7

¿Cómo diferenciar entre el locking de pantalla y el button de inicio presionando iOS5?

Sinceramente, no tengo idea de si Apple rechazaría o aceptaría esta implementación. Házmelo saber si terminas de usarlo de alguna manera. También creo que esto es iOS 7 y más.