Realizar código en segundo plano durante mucho tiempo en iOS (Swift), ¿es posible?

Si necesita ejecuciones periódicas en segundo plano (después de que los usuarios pongan en segundo plano su aplicación y necesite ejecutar algún código de vez en cuando), entonces hay activaciones de recuperación en segundo plano. También puede enviar notificaciones remotas silenciosas a sus usuarios. También hay geofences a través de servicios de ubicación para activar periódicamente su aplicación, esto requeriría alguna excusa para obtener la ubicación y también realmente agota la batería.

Si necesita una ejecución continua en segundo plano, como continuar con algún código cuando el usuario pone en segundo plano la aplicación, entonces sí, NSURLSession si está tratando con tráfico de red. Probablemente haya un límite antes de que el sistema operativo lo corte y obligue a la aplicación a dormir. También puede tener navegación y voip para continuar con la actividad en segundo plano cuando el usuario sale de su aplicación, pero estos son muy obvios para el usuario y requieren una razón válida.

Hay algo de lo que he oído hablar, pero nunca lo implementé, que de alguna manera abre una conexión de socket con un servidor y mantiene esa conexión y permite la actividad en segundo plano. Pero nunca lo he leído y nunca he necesitado configurar algo así, así que ni siquiera estoy seguro de que sea posible. O si lo fuera, si todavía es posible ahora.

Hay un truco que puedes usar para reproducir música de fondo silenciosa. Es posible que esto no tenga ningún límite real (puede simplemente repetir una pista para siempre). Pero tendrías que dar una excusa para reproducir sonidos en segundo plano, o Apple podría rechazarte por habilitar la música de fondo. Estoy seguro de que esto también te da un golpe de batería, pero no tanto como las geolocalizaciones probablemente.

PERO , espero que sea un desarrollador moral de iOS y que no abuse de la relación que tiene con sus usuarios aprovechando sus teléfonos para cualquier cosa de la que no estén completamente al tanto.

Buena suerte.

Eso es correcto. Para mantener la duración de la batería, sus aplicaciones generalmente no deberían funcionar en segundo plano. Sin embargo, puede solicitar tiempo adicional para realizar algunas tareas (como guardar) cuando su aplicación cambia a segundo plano.

Ha pasado un tiempo desde que leí la documentación, pero según Apple, a menos que esté dentro de una categoría de aplicación específica (es decir, aplicación de música, navegación), no puede ejecutar procesos en segundo plano durante mucho tiempo. Lo que puede tener es que la aplicación se ejecute en segundo plano durante un breve período de tiempo para finalizar lo que necesita antes de ingresar a un estado suspendido.

¿Podrías evitarlo? Probablemente, estoy seguro de que hay una manera de hacerlo, pero corre el riesgo de un mayor rechazo por parte de Apple.