Les widgets interactifs en SwiftUI, et les écritures qui n'arrivent jamais
Un bouton dans un widget ressemble à une ligne de code. Le stockage dans lequel il écrit est la partie intéressante.
Les widgets interactifs sont la fonctionnalité qui a le plus changé cette app, et le code d’exemple les fait paraître triviaux. Mettez un Button avec un AppIntent dans votre widget, cochez une habitude, terminé. C’est trivial jusqu’au moment où vous vérifiez si la coche est bien dans votre base de données, et parfois elle n’y est pas.
La raison est que l’extension widget est un processus séparé avec sa propre vue du stockage. Si votre stockage vit dans le conteneur de l’app, le widget ne peut pas le voir : il faut donc un groupe d’apps. Si l’app tourne en arrière-plan, elle peut détenir un contexte qui n’a aucune idée qu’une écriture a eu lieu ailleurs. Et si vous rechargez la mauvaise timeline, ou oubliez d’en recharger une, le widget affiche les bonnes données au prochain rafraîchissement système, qui peut arriver quarante minutes plus tard, et l’utilisateur conclut que l’appui n’a rien fait.
Il y a aussi un budget. Les rechargements de widgets sont rationnés, et une app qui recharge à chaque écriture se fait brider, ce qui produit exactement le widget périmé que vous essayiez d’éviter.
Cet article couvre la configuration du groupe d’apps, l’intent qui effectue l’écriture, la notification de changement entre processus, quelles timelines recharger et quand, et comment tester tout ça sans finir convaincu que vous perdez la tête.
Plan
Statut : plan. L’introduction ci-dessus est de la copie finie. Tout ce qui suit est le plan des sections de la version complète, visant environ 1 600 mots.
- Ce qui a changé dans iOS 17. Un AppIntent dans un widget, et la frontière de processus qu’il franchit.
- Les groupes d’apps. L’emplacement du stockage, et la migration si le vôtre est au mauvais endroit.
- L’intent d’écriture. Le code qui est sorti, avec la gestion d’erreurs qui compte.
- La notification entre processus. Faire remarquer à l’app une écriture venue du widget.
- Recharger les timelines. Lesquelles, quand, et le budget que vous dépensez.
- Le tester. Une méthode qui attrape les défaillances que le simulateur cache.