web-dev-qa-db-fra.com

Comment garder une application iPhone fonctionnant en arrière-plan pleinement opérationnelle

tout d'abord, je sais que seules les applications voip, audio et de localisation sont prises en charge en arrière-plan et qu'elles ne fonctionneront que pendant la lecture du son ou lors de l'utilisation des services de localisation, etc.

Ce que je veux savoir, c'est s'il existe un moyen de faire fonctionner mon application en arrière-plan pleinement opérationnel, peu importe l'impact sur la durée de vie de la batterie.

De cette façon, l'utilisateur de mon application peut sélectionner des paramètres pour maintenir l'application en vie quand il le souhaite et juste pour la durée qu'il souhaite. Par exemple, s'il attend quelque chose qui nécessite l'exécution de l'application, après avoir reçu les messages, il peut désactiver la fonctionnalité Keep Alive.

Je ne sais pas si c'est possible mais j'avais lu quelques articles qui le disent mais malheureusement ils n'ont pas dit comment = (

MISE À JOUR: Dans ce tutoriel , j'ai trouvé qu'Acrobits a deux applications sur le Apple Store qui "peuvent forcer l'application à rester vivante et éveillée en arrière-plan". Donc il existe un moyen de le faire?

32
Paul N

Vous pouvez effectuer des tâches pendant un temps limité après que votre application a été dirigée vers l'arrière-plan, mais uniquement pour la durée indiquée. Si vous courez plus longtemps, votre application sera arrêtée. Consultez la section " Fin d'une tâche de longue durée en arrière-plan " du Guide de programmation d'application iOS pour savoir comment procéder.

D'autres ont utilisé la lecture audio en arrière-plan pour rester en vie en tant que processus d'arrière-plan, mais Apple n'acceptera une telle application que si la lecture audio est une fonction légitime. Article 2.16 sur Apple les lignes directrices publiées de la revue indiquent:

Les applications multitâches ne peuvent utiliser les services d'arrière-plan qu'aux fins prévues: VoIP, lecture audio, emplacement, exécution des tâches, notifications locales, etc.

19
Brad Larson

À partir d'ioS 7, il existe de nouvelles façons d'exécuter les applications en arrière-plan. Apple reconnaît désormais que les applications doivent constamment télécharger et traiter les données en permanence.

Voici la nouvelle liste de toutes les applications pouvant fonctionner en arrière-plan.

  1. Applications qui lisent du contenu audible à l'utilisateur en arrière-plan, comme une application de lecteur de musique
  2. Applications qui enregistrent du contenu audio en arrière-plan.
  3. Applications qui gardent les utilisateurs informés de leur emplacement à tout moment, comme une application de navigation
  4. Applications prenant en charge le protocole Voice over Internet Protocol (VoIP)
  5. Applications qui doivent télécharger et traiter régulièrement de nouveaux contenus
  6. Applications qui reçoivent des mises à jour régulières des accessoires externes

Vous pouvez déclarer les tâches d'arrière-plan prises en charge par l'application dans Info.plist à l'aide de X Code 5+. Par exemple. l'ajout de la clé UIBackgroundModes au fichier Info.plist de votre application et l'ajout d'une valeur de "récupération" au tableau permettent à votre application de télécharger et de traiter régulièrement de petites quantités de contenu à partir du réseau. Vous pouvez faire de même dans l'onglet "capacités" des propriétés de l'application dans XCode 5 (en attachant un instantané)

Capabilities tab in XCode 5 Vous pouvez trouver plus à ce sujet dans Apple

31
Pradeep Mahdevu

Si une tâche d'arrière-plan s'exécute pendant plus de 10 minutes, la tâche sera suspendue et le bloc de code spécifié avec beginBackgroundTaskWithExpirationHandler est appelé pour nettoyer la tâche. le temps restant en arrière-plan peut être vérifié avec [[UIApplication sharedApplication] backgroundTimeRemaining]. Initialement, lorsque l'application est au premier plan, backgroundTimeRemaining est défini sur une valeur supérieure. Lorsque l'application passe en arrière-plan, vous pouvez voir la valeur backgroundTimeRemaining diminuer de 599.XXX (1o minutes). une fois que backgroundTimeRemaining devient ZERO, la tâche en arrière-plan est suspendue.

        //1)Creating iOS Background Task
        __block UIBackgroundTaskIdentifier background_task;
        background_task = [application beginBackgroundTaskWithExpirationHandler:^ {

               //This code block is execute when the application’s 
               //remaining background time reaches ZERO.
          }];


        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            //### background task starts

            //#### background task ends
        });

        //2)Making background task Asynchronous
        if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)])
        {
            NSLog(@"Multitasking Supported");

            __block UIBackgroundTaskIdentifier background_task;
            background_task = [application beginBackgroundTaskWithExpirationHandler:^ {

                //Clean up code. Tell the system that we are done.
                [application endBackgroundTask: background_task];
                background_task = UIBackgroundTaskInvalid;
            }];


        **//Putting All together**
            //To make the code block asynchronous
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

                //### background task starts
                NSLog(@"Running in the background\n");
                while(TRUE)
                {
                    NSLog(@"Background time Remaining: %f",[[UIApplication sharedApplication] backgroundTimeRemaining]);
                    [NSThread sleepForTimeInterval:1]; //wait for 1 sec
                }
                //#### background task ends

                //Clean up code. Tell the system that we are done.
                [application endBackgroundTask: background_task];
                background_task = UIBackgroundTaskInvalid; 
            });
        }
        else
        {
            NSLog(@"Multitasking Not Supported");
        }
7
Sabareesh

Pour exécuter sur des appareils iOS stockés, faites de votre application un lecteur/enregistreur audio ou une application VOIP, une application légitime pour la soumission à l'App Store, ou une fausse si ce n'est que pour votre propre usage.

Même cela ne rendra pas une application "pleinement opérationnelle" quelle qu'elle soit, mais limitée à des API limitées.

3
hotpaw2

Cela dépend de ce qu'il fait. Si votre application prend trop de mémoire ou appelle des fonctions/classes, cela ne devrait pas être le cas, SpringBoard peut y mettre fin. Cependant, il sera très probablement rejeté par Apple, car il ne suit pas leurs 7 utilisations en arrière-plan.

2
jrtc27

Peut-être que le lien aidera bcz u à implémenter le code dans Appdelegate dans l'application exécutée en arrière-plan. Consultez également le site developer.Apple.com pour la classe d'application ici est le lien pour exécuter l'application dans Contexte

1
Xeieshan