Bonne façon de sortie de l'application iPhone?
Je suis à la programmation d'une application iPhone, et j'ai besoin de le forcer à quitter en raison de certaines actions de l'utilisateur. Après le nettoyage de la mémoire de l'application alloué, quelle est la méthode appropriée pour appeler à mettre fin à l'application?
- Il y a une seule bonne façon - bouton Home..
- La situation que je peux imaginer que quelqu'un envisage de quitter par programme est le scénario suivant: l'Application démarre, affiche conditions d'utilisation, en refusant de l'accepter alors quitte l'application. C'est quelque chose de marques, parfois, la pression, le développeur à faire. Mais c'est faux.
- Normalement, vous mettez votre avertissement/conditions d'utilisation (CLUF) sur itunes connect lorsque vous téléchargez l'application. Si l'utilisateur téléchargements de votre application, cela signifie qu'ils ont accepté le CLUF
- D'accord. 100% avec vous
- même à appuyer sur le bouton home ne marche pas quitter l'application techniquement, l'application ne va que dans le fond.. non??
- Si quelqu'un est à la recherche de ce, et peut utiliser l'Api Privées, voir cette réponse.
- Je ne comprends pas pourquoi vous auriez même pas besoin de quitter l'application. Même pour quelque chose comme le CLUF au sein de l'application, il suffit de ne pas aller à la page suivante de l'application jusqu'à ce que l'utilisateur appuie sur le "accepter les Termes & Conditions" bouton, afin qu'ils gardent à regarder la même page, jusqu'à ce qu'ils acceptent. Ou voulez-vous la bande dessinée réponse ? Hasta la vista, baby!
- ce n'est pas seulement faux, si l'utilisateur ne peut pas utiliser votre application si vous n'acceptez pas leur CLUF ou de l'échec de toutes autres conditions, Apple va tout simplement de ne pas approuver une telle application. Ce qui est arrivé à une application qui exige une connexion Internet active pour le lancement et l'utilisation.
- Il y a des raisons entièrement valables pour les avoir à les forcer à quitter une application ios. Mon cas est que je suis la distribution de pré-lancement des versions bêta de mon application. Les versions bêta ouverte tous les PEI est gratuit. Ceux-ci ont une limite de temps et doivent expirer après quelques semaines. Je suis donc en utilisant la réponse ci-dessous pour tuer l'application après la version bêta de la période. Je vais supprimer ce dans la version LIVE. Mais toujours la réponse m'a aidé, et c'est exact!
- Une raison valable pour quitter une application est de savoir si c'est un de longue durée d'arrière-plan de l'exécution d'application, et l'application entre dans un état où il n'a plus besoin de s'exécuter en arrière-plan. Par exemple, l'utilisateur se déconnecte. Dans ce cas, il serait logique de sortie de sorte que lorsque l'application démarre ensuite il commence à nettoyer. Ce serait agir comme un filet de sécurité contre les fuites de mémoire, entre autres raisons. Remarque, dans ce cas, l'application serait de sortir de l'arrière-plan, de sorte que l'utilisateur n'auraient pas remarqué quelque chose de mal.
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé
exit(0)
?Sinon,
[[NSThread mainThread] exit]
, bien que je n'ai pas essayé, il semble que la solution plus appropriée.exit(EXIT_SUCCESS);
Sur l'iPhone il n'y a pas de notion de fermeture d'une application. La seule action qui devrait provoquer une application pour arrêter de fumer est de toucher le bouton d'Accueil sur le téléphone, et ce n'est pas quelque chose que les développeurs ont accès.
Selon Apple, votre application ne doit pas mettre fin de sa propre. Puisque l'utilisateur n'a pas frappé le bouton de la Maison, tout retour à l'écran d'Accueil donne à l'utilisateur l'impression que votre application s'est écrasé. Ceci est source de confusion, non-standard de comportement et doit être évitée.
exit(0) apparaît à l'utilisateur comme les accidents, pour afficher un message de confirmation à l'utilisateur. Après confirmation de la suspension(bouton de la maison de la presse par programmation) et attendre 2 secondes tandis que l'application va de fond avec l'animation, puis la sortie de derrière de l'utilisateur vue
Ce n'est pas vraiment un moyen de quitter le programme, mais un moyen de forcer les gens à cesser de fumer.
Accédez à vos informations.plist et vérifiez que la touche "Application ne s'exécute pas en arrière-plan". Cette fois, lorsque l'utilisateur clique sur le bouton home, l'application se ferme complètement.
Vérifier la Q&Un ici: https://developer.apple.com/library/content/qa/qa1561/_index.html
Ajouter
UIApplicationExitsOnSuspend
bien surapplication-info.plist
àtrue
.Après quelques tests, je peux dire la chose suivante:
[UIApplication sharedApplication]
entraînera l'application à la recherche comme il s'est écrasé, MAIS il va appeler- (void)applicationWillTerminate:(UIApplication *)application
avant de le faire;exit(0);
permettra également de mettre fin à l'application, mais elle sera "normal" (le springboard icônes s'affiche comme prévu, avec le zoom de l'effet), MAIS il ne fera pas appel de la- (void)applicationWillTerminate:(UIApplication *)application
méthode du délégué.Mon conseil:
- (void)applicationWillTerminate:(UIApplication *)application
sur le délégué.exit(0);
.Votre ApplicationDelegate est notifié de l'intention de cesser de fumer par l'utilisateur:
Quand je reçois cette notification je viens de l'appeler
Qui fait tout le travail. Et la meilleure chose est, il est les utilisateurs intention d'arrêter de fumer, c'est pourquoi cela ne devrait pas être un problème appelant n'.
Sur mon Audio-App, il était nécessaire de quitter l'application après que les gens ont été la synchronisation de leur appareil pendant que la musique jouait toujours. Dès que la synchronisation est terminée, je reçois une notification. Mais la fermeture de l'application juste après qui seraient effectivement ressembler à un accident.
Donc à la place j'ai mis un drapeau à VRAIMENT quitter l'application sur le prochain semi-finition à l'action. Ce qui est correct pour l'actualisation de l'application après une synchronisation.
Mon Application a été rejetée récemment la colombie-britannique, j'ai utilisé une méthode non documentée. Littéralement:
"Malheureusement, il ne peut pas être ajoutée à l'App Store parce que c'est à l'aide d'une API privée. L'utilisation de la non-Api publiques, qui, comme indiqué dans l'iPhone Developer Program, Contrat de Licence de la section 3.3.1, est interdite:
"3.3.1 les Applications ne peuvent utiliser les Api Documentée de la manière prescrite par Apple et ne doit pas utiliser ou appeler n'importe quel Api privées."
Le non-public de l'API qui est inclus dans votre application est terminateWithSuccess"
Apple dire:
"Avertissement: Ne pas appeler la fonction de sortie. Les Applications qui appellent à la sortie apparaît à l'utilisateur d'avoir écrasé, plutôt que d'effectuer un arrêt progressif et l'animation de retour à l'écran d'Accueil."
Je pense que c'est une mauvaise hypothèse. Si l'utilisateur appuyez sur un bouton quitter et un message s'affiche pour dire quelque chose comme: "L'application va maintenant quitter.", il ne semble pas être écrasé. Apple devrait fournir un moyen valable de quitter une application (pas de sortie(0)).
Cela a obtenu une bonne réponse, mais a décidé de développer un peu plus:
Vous ne pouvez pas obtenir de votre demande acceptée à l'AppStore sans la lecture de Apple iOS Human Interface Guidelines bien. (ils conservent le droit de refuser de vous pour faire rien contre eux) La section "Ne Quittez pas par programmation" http://developer.apple.com/library/ios/#DOCUMENTATION/UserExperience/Conceptual/MobileHIG/UEBestPractices/UEBestPractices.html
est exact, directrice de la façon dont vous devriez traiter dans ce cas.
Si jamais vous avez un problème avec plate-forme Apple, vous ne pouvez pas trouver facilement une solution pour, consulter HIG. Il est possible d'Apple n'a tout simplement pas envie de le faire et ils ont généralement (je ne suis pas Apple donc je ne peux pas garantir toujours) ne disent dans leur documentation.
Nous ne pouvons pas quitter l'application en utilisant
exit(0)
,abort()
fonctions, comme Apple vous déconseillons fortement l'utilisation de ces fonctions. Si vous pouvez utiliser ces fonctions pour le développement ou pour des fins d'essais.Veuillez trouver cette Pomme Q&A thread pour obtenir plus d'informations.
Que l'utilisation de cette fonction créer l'impression comme application de s'écraser. Je me suis donc quelques suggestions comme nous pouvons l'affichage de l'Alerte à la résiliation message à la connaissance de l'utilisateur à propos de la fermeture de l'application, en raison de l'indisponibilité de certaines fonctionnalités.
Mais iOS Human Interface de ligne Directrice pour Le Démarrage Et L'Arrêt De L'App, ce qui suggère que n'utilisez Jamais de Quitter ou de Fermer le bouton de pour mettre fin à l'Application. Plutôt alors qu'ils sont en suggérant à l'affichage du message adéquat pour expliquer la situation.
En plus de ce qui précède, la bonne, la réponse, je voulais juste ajouter, pensez à nettoyer votre mémoire.
Après que votre application se ferme, l'iPhone OS pour nettoyer automatiquement tout ce que votre application gauche derrière, afin de libérer toute la mémoire manuellement peut augmenter la quantité de temps qu'il faut à votre demande pour quitter.
Hm, vous pouvez avoir à quitter l'application si, par exemple, votre application nécessite une connexion internet. Vous pouvez afficher une alerte, puis faire quelque chose comme ceci:
J'ai utilisé le [[NSMutableArray nouveau] addObject:nil] l'approche mentionnée ci-dessus à la force de quitter (crash) de l'application sans faire un conte de sortie(0) appel de fonction.
Pourquoi? Parce que mon application utilise le certificat d'épingler sur l'ensemble du réseau des appels API pour prévenir man-in-the-middle attaques. Ces inclure les appels d'initialisation mon application en fait au démarrage.
Si le certificat d'authentification échoue, tous mes appels d'initialisation erreur et laisser mon application dans un état indéterminé. Permettant à l'utilisateur de rentrer à la maison et puis de nouveau dans l'app ne fonctionne pas, à moins que l'application a été éliminé par le système d'exploitation c'est toujours initialisé et indigne de confiance.
Donc, dans ce cas, nous avons jugé préférable de pop une alerte informe l'utilisateur que l'application fonctionne dans un environnement d'insécurité et puis, quand ils ont frappé "Fermer", la force de quitter l'application à l'aide de la méthode susmentionnée.
Il a bien fonctionné et appelle automatiquement
pour supprimer le temps de compilation d'avertissement ajouter ce code
L'utilisateur doit décider quand une application se ferme.
Je ne pense pas que c'est une bonne interaction de l'utilisateur lorsqu'une application se ferme. Par conséquent, il n'y a pas de bonne API pour elle, seul le bouton d'accueil est un.
Si il y a une erreur: mettre en Œuvre une meilleure ou d'Avertir l'utilisateur.
Si il faut un redémarrage: mettre en Œuvre-il préférable d'en Informer les utilisateurs.
Ça semble idiot, mais c'est une mauvaise pratique pour quitter l'application sans laisser l'utilisateur décider et ne notifiant pas de lui. Et puisqu'il y a un bouton d'accueil de l'interaction de l'utilisateur, Apple unis, il ne devrait pas être 2 choses pour la même fonction (la sortie d'une appli).
Quitter une application d'une autre manière que le bouton home est vraiment non-iOS-esque approche.
J'ai fait de cette aide, cependant, qui n'utilisent pas de trucs privés:
Mais toujours pas destinés à la production dans mon cas. C'est pour les tests de collision de reportings, ou à rapidement redémarrer après une Base de Données de réinitialisation. Tout juste fait-il sûr de ne pas être rejeté si la fonction à gauche dans le code de production.
Swift 4.2 (ou plus)
Bibliothèque appelée
Darvin
peut être utilisé.NB: Ceci n'est pas recommandée dans les applications iOS.
Faisant cela, vous obtenez de crash.
Vous ne devriez pas appeler directement la fonction
exit(0)
qu'il va quitter immédiatement la demande et ressemblera votre application est écrasé. Afin de mieux montrer aux utilisateurs une alerte de confirmation et de les laisser faire cela eux-mêmes.Swift 4.2
Utilisation:
Quitter une application autre façon
J'ai fait de cette aide, cependant, qui n'utilisent pas de trucs privés:
Exit(0);
Il peut être approprié pour quitter une application que si elle est d'une longue durée de vie application qui exécute également en arrière-plan, par exemple, pour obtenir l'emplacement des mises à jour (à l'aide de la emplacement des mises à jour arrière-plan de la capacité pour que).
Par exemple, imaginons que l'utilisateur se déconnecte de votre position en fonction de l'app, et pousse à l'application de l'arrière-plan en utilisant le bouton d'accueil. Dans ce cas, votre application peut continuer à courir, mais elle pourrait avoir un sens complètement en sortir. Il serait bon pour l'utilisateur (libère de la mémoire et d'autres ressources qui ne doivent pas être utilisés), et bon pour la stabilité des applications (c'est à dire en assurant que l'application est régulièrement redémarré lorsque cela est possible est un filet de sécurité contre les fuites de mémoire et d'autres problèmes de mémoire).
Cela pourrait (mais ne devrait probablement pas, voir ci-dessous 🙂 être atteint avec quelque chose comme:
Depuis l'application, puis la sortie de l'arrière-plan qu'il ne sera pas mauvais pour l'utilisateur, et ne ressemblera pas à un crash, en fournissant l'interface utilisateur est restauré à la prochaine exécution de l'application. En d'autres termes, pour l'utilisateur, il ne serait pas très différent d'un système initié à la résiliation de l'application lorsque l'application est en arrière-plan.
Encore, il serait préférable d'utiliser une approche standard de laisser le système de savoir que l'application peut être résilié. Par exemple, dans ce cas, en vous assurant que le GPS n'est pas en cours d'utilisation par l'arrêt de demander l'emplacement des mises à jour, y compris la désactivation de montrer emplacement actuel sur une carte si elle est présente. De cette façon, le système se chargera de mettre fin à l'application de quelques minutes (c'est à dire
[[UIApplication sharedApplication] backgroundTimeRemaining]
) après l'app entre l'arrière-plan. Cela permettrait d'obtenir les mêmes avantages sans avoir à utiliser le code pour mettre fin à l'application.Et bien sûr, à l'aide de
exit(0)
ne serait jamais approprié pour la moyenne de la production application qui s'exécute en premier plan, comme pour les autres réponses qui font référence à http://developer.apple.com/iphone/library/qa/qa2008/qa1561.html