Google custom iOS, Gboard, a une fonctionnalité intéressante qui ne peut être accompli en utilisant des Api publiques dans le SDK iOS (comme d'iOS 10). Je voudrais savoir exactement comment Google accomplit la tâche de par programme sautant en arrière d'une application dans l'app Commutation pile dans Gboard.
Custom iOS claviers ont deux composantes principales: le conteneur d'application et le clavier de l'application de l'extension. Le clavier de l'application de l'extension fonctionne dans un système d'exploitation distinct processus qui est lancé à chaque fois qu'un utilisateur est dans n'importe quelle application sur leur téléphone qui nécessite la saisie de texte.
Ce sont approximatives étapes qui peuvent être suivies, à l'aide de Gboard, pour voir l'effet de par programmation, un retour à une application précédente:
- Un utilisateur démarre le Apple des Messages de l' application sur leur iPhone et tape un champ de texte pour commencer la saisie du texte.
- Le Gboard d'extension du clavier est lancé et les utilisateurs voit le Gboard clavier personnalisé (alors qu'ils sont encore dans l'Apple app Messages).
- L'utilisateur appuie sur la touche microphone à l'intérieur de la Gboard d'extension du clavier pour faire de la voix de saisie de texte.
- Gboard utilise une url personnalisée régime pour le lancement de la Gboard app container. Le Gboard clavier et Apple app messages sont poussés vers le bas d'une couche dans l'Application de la pile et de la Gboard app container est maintenant la première application dans l'app pile. Le Gboard conteneur application utilise le microphone pour écouter l'utilisateur de la parole et les traduit en texte lesquels il place sur l'écran.
- L'utilisateur appuie sur le bouton "Terminé" quand ils sont satisfaits de la saisie de texte qu'ils voient sur l'écran.
- C'est là que la magie opère... comme l'écran de saisie de texte est rejeté, la Gboard app container est également rejetée automatiquement. Le Gboard app container s'en va et est remplacé par l'Apple app Messages (parfois de la Gboard clavier processus d'extension est encore en vie, parfois, il est relancé, et parfois, il a besoin d'être relancé manuellement en appuyant sur à l'intérieur d'un champ de texte.) . Comment est-ce que Google accomplir cette mission?
- Enfin, l'utilisateur voit le texte qui vient d'être traduit automatiquement insérée à l'intérieur du champ de saisie de texte. Sans doute Google accomplit cette mission par le partage de données entre les Gboard app container et l'extension du clavier.
Je suppose que Google est en utilisant des Api privées en explorant la barre d'état de la vue de la hiérarchie en Objective-C runtime introspection et en quelque sorte de synthèse appuyez sur événements ou d'appeler un exposé objectif / action. J'ai exploré un peu et ont été en mesure de trouver d'intéressant UIView sous-classes à l'intérieur de la barre d'état, comme UIStatusBarBreadcrumbItemView qui contient un tableau de UISystemNavigationActions. Je continue à explorer ces classes dans l'espoir que je puisse trouver un moyen de reproduire l'interaction de l'utilisateur.
Je comprends que l'utilisation d'Api privées est une bonne façon d'obtenir votre application à été rejeté à partir de l'App Store - ce n'est pas une préoccupation que j'aimerais être abordés dans la réponse. Je suis à la recherche principalement pour des réponses précises sur la façon exactement comment Google accomplit la tâche de par programme sautant en arrière d'une application dans l'app Commutation pile dans Gboard.