web-dev-qa-db-fra.com

Quitter l'application dans iOS 4.0

Avant iOS 4.0, un clic sur le bouton d'accueil de l'iPhone quittait l'application et Apple indiquait dans son guide que le fait de quitter l'application par programme n'était pas accepté.

maintenant, tout a changé dans iOS 4.0, en cliquant sur le bouton d'accueil, votre application est suspendue (mode multitâche) .. et je pense qu'il devrait exister un moyen clair pour l'utilisateur de quitter l'application, comme un bouton de sortie. 

est-ce que ça va maintenant avec apple? et comment peut-il être fait?

32
Tamer

Non ne devrait toujours pas faire ça.

Vous avez des gestionnaires pour les différentes étapes, voici donc comment procéder. Il ne sert à rien de sortir manuellement. Si vous redémarrez l'application, idéalement, elle commencerait là où vous l'aviez laissée, c'est-à-dire en reprenant ou en démarrant et en chargeant l'ancien état. 

Aucune raison de sortir.

Modifier

Comme cela ne cesse de réapparaître: Directives pour l'interface utilisateur iOS dit "Ne quittez pas par programme". Et nous avons vu de nombreux rapports d’applications qui comportaient des appels à exit () par le passé.

Quitter au lieu de suspendre en définissant la clé appropriée dans le fichier Info.plist convient parfaitement, bien entendu - mais ce n'est pas un bouton d'interface utilisateur dédié, mais simplement une implémentation spécifique à l'application de la sortie du programme par le bouton d'accueil.

21
Eiko

Vous pouvez définir la clé UIApplicationExitsOnSuspend d'Info.plist pour vous assurer que l'application est complètement terminée.

50
Joost Schuur

Il y a une raison pour invoquer exit() par programme.

Supposons que vous ayez une application VoIP qui est toujours démarrée au démarrage et redémarrée lorsqu'elle est tuée par le système, par exemple. quand avertissement de mémoire se produit. Normalement, c'est le comportement préféré, car vous devez exécuter en arrière-plan afin de conserver vos sockets voip TCP.

Cependant, si l'application prend en charge plusieurs modes de fonctionnement, tels que a) fonctionne en arrière-plan à l'aide de TCP et b) ne s'exécute pas en arrière-plan mais ne démarre qu'après acceptation de la notification Push. Si l'utilisateur utilise l'application en mode b), il ne le fait pas. D’imaginez que l’application consomme de la mémoire qui peut être utilisée pour d’autres applications.

Ce serait donc bien si l'application pouvait vérifier au démarrage si elle avait été démarrée en arrière-plan et si l'utilisateur souhaitait que l'application s'exécute en mode b) et avec exit(0) de façon élégante, de sorte qu'elle ne soit plus automatiquement redémarrée.

8
Stanislav Kutil

Voir aussi iOS Magie de débogage (Note technique TN2239) :

Sachez que le cycle de vie des applications iOS est sous le contrôle de l'utilisateur, ce qui signifie que les applications iOS ne doivent pas simplement quitter. Votre version validée ne doit abandonner l'appel que dans des circonstances où elle se serait effondrée de toute façon. L'appel d'abandon évite d'endommager les données de l'utilisateur ou vous permet de diagnostiquer plus facilement le problème.

Alors qu’il s’agissait de déterminer la cause d’une sortie prématurée, Comprendre et analyser les rapports de plantage d’application pour iPhone OS (note technique TN2151) pourrait présenter un intérêt.

Désolé de sortir un peu du sujet, mais cela concerne les sorties anticipées et le diagnostic.

Jeff

6
jww

J'ai eu un réel problème avec cela. Il est très important de quitter manuellement ou par programme.

Avec l'iPhone OS précédent, mon application écrivait son état (première utilisation ou deuxième fois, etc.) dans un plist quand elle se terminait. Lorsque l'utilisateur est revenu, il a voulu montrer différentes choses en lisant le plist. En outre, il souhaitait afficher le premier écran chaque fois que l'utilisateur revenait après avoir quitté.

Lorsque l’application est suspendue en arrière-plan avec iPhone OS4, elle revient là où elle s’était arrêtée (c.-à-d. En affichant le même écran où l’utilisateur était allumé) et ne change jamais son état, car applicationWillTerminate n’est plus appelé.

Parce que c’est le comportement souhaité la plupart du temps (pour pouvoir continuer lorsque vous sortez de l’application de façon temporaire), il doit exister un moyen de pouvoir choisir, c’est-à-dire le suspendre ou le quitter.

Puisque définir UIApplicationExitsOnSuspend = YES ne donne qu’un seul moyen (c’est-à-dire qu’il se termine toujours lorsque vous appuyez sur le bouton HOME), ce n’est pas une solution que je cherche.

Je veux que l'application sache une fois que toute la chaîne d'étapes est terminée, contrairement à ce que la séquence a été suspendue, et qu'elle se quitte au bon moment.

Pour ce faire, je dois être en mesure de terminer l'application et d'écrire l'état une fois l'utilisation terminée. D'autres fois, je veux juste que l'application soit suspendue.

Si vous appuyez deux fois sur le bouton ACCUEIL, vous pouvez voir les applications suspendues. Je peux supprimer (quitter) mon application en la touchant plus longtemps et en touchant le symbole (-) qui apparaît, mais ce n'est pas si intuitif pour les utilisateurs et trop d'étapes. 

Une autre option est d’avoir un bouton Quitter comme l’un des onglets de navigation de mon application, mais c’est moche. Pour l'instant, ma seule option semble être de définir UIApplicationExitsOnSuspend = YES. 

3
Yoichi

Voici les étapes pour la réponse de @Joost Schuur:

  1. Ouvrez votre info.plist fichier

  2. Ajouter la clé UIApplicationExitsOnSuspend ou Select Application ne s'exécute pas En arrière-plan

  3. Définissez la nouvelle clé sur OUI ou remplissez la case à cocher

Les points d'arrêt dans applicationWillResignActive et applicationWillTerminate montreront que cela fonctionne. 

3
iMeMyself

Vous pouvez toujours utiliser exit(1). Il s'agit d'une sortie brute/forcée avec un entier pour un code/une raison . Vous pouvez l'utiliser lors du développement, comme en mode simulation lorsque vous souhaitez simplement terminer; comme maintenant.

3
Frederick C. Lee

Tu peux le faire: 

@IBAction func yourButtonAcation(_ sender: Any) {

    UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)

}
0
Deepak Kumar

Vous n'êtes pas censé faire ça. Lorsque l'utilisateur souhaite quitter votre application, il appuiera sur le bouton ACCUEIL.

Lorsque l'utilisateur appuie sur le bouton d'accueil, vous recevez une notification UIApplicationWillResignActiveNotification. Utilisez cette notification pour supprimer toutes vos ressources.

Fondamentalement, votre application doit "se cacher dans un coin" (utiliser le moins de mémoire possible) lorsque l'utilisateur appuie sur le bouton d'accueil. Cependant, il y a un compromis car plus vous démontez, plus il faut de temps pour que l'application soit à nouveau affichée lorsque l'utilisateur change de version (vous devez recharger toutes vos ressources).

0
bobobobo