Skip to main content

Alessandros's Blog - Build with freedom. Share with purpose

24 Juillet 2025 - Défis et galères avec SwiftData - Presque au bout du tunnel !

Salut ! Journal de bord du jeudi 24 juillet, jour 45 de formation et 22ème jour des 100 Days of SwiftUI. Il ne reste qu’un jour et je termine cette semaine - j’y suis presque !

# Finalisation de GuessTheFlag avec tous les drapeaux du monde

Ce matin, j’ai finalisé le jeu GuessTheFlag avec quelques challenges supplémentaires à faire. En plus des challenges que Paul avait donnés, j’ai été chercher sur internet les images de tous les drapeaux et je les ai ajoutés au projet.

Maintenant j’ai une vraie application avec beaucoup de drapeaux, comme ça on peut faire un petit questionnaire et voir qui est le plus fort ! C’était une petite partie de révision avec les informations théoriques.

# Refactoring : ContactHive v2

## Le déclic du matin

Pour la partie pratique de la matinée, au lieu de faire des exercices quelconques, j’ai créé un nouveau projet dans Xcode que j’ai appelé ContactHive v2 - mon application de des contacts (voir billets précédents).

J’ai créé une première page basée sur les designs que j’avais faits à l’époque. J’étais super absorbé - je n’ai même pas vu qu’il était midi !

## L’après-midi : la réalité du développement solo

Cet après-midi, j’ai continué sur le projet de cartes de fidélité et j’ai avancé sur la user story numéro 2. Et là… j’ai galéré. Vraiment galéré.

Il y a des choses fondamentales que je ne sais pas faire - comme naviguer entre les pages ou revenir à la page principale après avoir appuyé sur un bouton. Je vais attendre de voir ça avec Paul plutôt que de faire n’importe quoi.

# Découvertes techniques du jour

## SwiftData : mise à jour vs recherche

Ce que j’ai compris avec SwiftData :

  • Mettre à jour : c’est super simple ! Il suffit de changer les données dans l’objet et SwiftData fait la mise à jour automatiquement.
  • Rechercher : c’est plus complexe, il faut créer des prédicates. Si j’ai bien compris, tu dois d’abord définir l’objet que tu veux chercher (la query), puis dire “cherche-moi cette query avec des données spécifiques, et terminer avec avec un do try catch

## Conversion JSON vers modèle

J’ai aussi travaillé sur la conversion de données JSON dans un modèle utilisable. À l’ouverture de l’application, je crée un array que je compare aux données existantes. Ce n’est peut-être pas la meilleure approche - je devrais sans doute ajouter les données directement dans un modèle SwiftData en tant qu’objet. Il y a matière à amélioration dès que j’aurai plus de connaissances sur la manipulation JSON dans Swift.

# Les galères techniques d’aujourd’hui

## Messages d’erreur cryptiques de Xcode

Je commence à comprendre pourquoi les gens disent que Xcode c’est un peu mal foutu. Parfois tu as des erreurs tellement obscures que tu ne sais pas d’où ça vient :

  • Premier cas : Ma toolbar avait soi-disant une “utilisation ambiguë”. En fait, c’était simplement parce que j’avais utilisé une couleur black.secondary qu’il n’appréciait pas. J’ai cherché 10-15 minutes pour ça.

  • Deuxième cas : Après avoir changé le data model pour SwiftData, même message d’erreur. J’avais oublié de changer les noms de propriétés dans la page correspondante. Encore 20 minutes de perdues.

## Le défi des couleurs hexadécimales

Problème non résolu : comment importer les couleurs hexadécimales. J’ai vu des trucs sur internet où il faut créer des classes, mais je ne veux pas l’importer bêtement dans le projet sans comprendre.

C’est important parce que l’API de “LocalCard Solutions” (ma société cliente fictive) envoie de l’hexadécimal au format hashtag + six valeurs, et ça n’est pas pris en compte directement par Swift.

# Victoires du jour

## Transfert de données entre vues

Hier j’avais un problème : comment transférer des valeurs entre une vue et une autre ? Cette fois-ci, j’ai transféré l’objet SwiftData directement, et comme ça je peux modifier directement les données.

J’ai pu ajouter des fonctionnalités supplémentaires :

  • N’ajouter que des cartes actives
  • Limiter à une carte par commerce (on ne peut pas avoir plusieurs cartes actives du même commerçant)
  • Navigation fluide : clic sur une carte dans le wallet → page des détails → bouton “compléter pour test” → mise à jour directe

# Réflexions sur cette phase d’apprentissage

## L’équilibre entre ambition et réalisme

J’ai vraiment beaucoup travaillé au niveau code aujourd’hui.

J’avance beaucoup plus vite que Paul dans le programme, mais je pense que c’est important de garder ses réflexes et ses bases. L’après-midi je galère, mais je galère et j’avance petit à petit.

Je me suis peut-être donné des challenges un peu trop ambitieux au départ - j’ai eu les yeux plus grands que la bouche ! Mais d’un côté, je me dis que c’est quand même bien :

Si tu fais des choses simples sans pratiquer et sans galérer, ça ne va pas rentrer dans ta tête.

## Le côté positif des difficultés

Il y a quand même des choses agréables malgré les défis. À mon avis, 80% des choses sont agréables, après il reste les 20% que tout le monde déteste, je pense !

Cette approche me permet vraiment d’apprendre en profondeur, même si c’est parfois frustrant.


Voilà pour aujourd’hui ! Demain c’est le dernier jour de cette semaine intensive. On se retrouve demain !

Alessandro