[Projet] iEvals: une version iOS d'une app MacOS existante

Bonjour,


 


Je pénètre prudemment dans le monde iOS dont je m'étais jusque-là  tenu à  l'écart – reste à  savoir si c'était avec raison.


 


Voilà  plusieurs semaines que je me débats, bouquins en main, pour essayer de comprendre comment iOS fonctionne. Au vu du nombre d'applications déposées sur l'AppStore, je me dis que ça ne doit pas être si difficile que ça... et donc je commence à  douter fortement de mes propres capacités.


 


J'ai développé il y a quelque temps une app MacOS construite autour d'un amour de petit modèle Core Data, dont les données sont modifiées via un petit groupe de NSArrayControllers qui sont de pures abstractions, et une vue unique bourrée dans un seul xib.


 


Je laisse dès lors la magie conjuguée de Core Data, des bindings et du KVO/KVC opérer, réduisant mon code à  quelques dizaines de lignes, et ça marche comme dans un rêve.


 


Pressé par mes collègues d'en développer une version iOS, je me mets en route, pensant me rendre dans un pays proche dont la langue est la même... et je débarque sur Alpha Centauri B, en plein milieu d'une foule qui s'interpelle dans un idiome que je ne comprends pas.


 


Je vous passe les déconvenues que vous avez peut-être connues, les exécutions qui ne démarrent même pas parce qu'il manque un contrôleur, une cellule, ou un machin en UI. Ou l'écran obstinément noir du simulateur " lorsqu'il accepte enfin de s'ouvrir. Ou les exemples de Hillegass qui ne passent pas la compilation.


 


Pour moi, iOS est un changement de paradigme complet, le modèle MVC existe bien, mais il est redéfini. Tout le boulot fait en arrière-plan par les bindings doit être codé à  la main " oh, je les entends déjà  dire, ceux qui vantent les bienfaits du codage en dur, ils rejoignent ceux qui préfèrent la gestion "manuelle" de la mémoire à  ARC, ceux qui privilégient les cartes perforées aux lignes sur l'écran. Je les comprends fort bien: moi-même, je préfère l'Autoresizing à  Autolayout...


 


Mais surtout, il me semble que loin de découvrir des merveilles, je dois plutôt renoncer à  bien des choses: c'est vrai qu'on se sent à  l'étroit dans une sandbox, que le multi-fenêtre/multi-document me manque, que voir mes documents s'afficher dans le Finder était rassurant, qu'une simple NSSplitView me paraà®t autrement puissante qu'une UISplitView grotesquement figée...


 


Voilà  pour les grognements. Passons à  l'application...


 


Sur l'image ci-dessous, la structure VC de l'app MacOS. Je sais déjà  que le modèle est transférable tel quel. Ce que je voudrais savoir, c'est si cela vous semble réalisable(1). Je vise l'iPad " faut pas pousser quand même " en mode Landscape uniquement.


 


Certes, il s'agit d'une application sérieuse, un rien rébarbative, qui effectue un travail important et stocke des résultats vitaux " rien à  voir donc avec un iBidule qui mesure la fréquence des aboiements de votre chien pour partager le résultat avec vos amis sur Facebook...


 


Centauriens, pardonnez mes a priori " je suis un noob complet... Je pense revenir avec des questions du genre "C'est quoi la différence entre un var et un let?" comme je l'ai lu ailleurs sur ce site...


 




(1) D'après le formateur que je tente de suivre en ce moment, c'est faisable. Mais ce gars-là  est enseignant à  l'Ecole Polytechnique et engrange les k sur Stack Overflow... Et il conjugue apprentissage d'iOS et passage à  Swift, ce qui fait deux lièvres à  courir...


 

Réponses

  • CéroceCéroce Membre, Modérateur
    février 2015 modifié #2

    Bien sûr que c'est réalisable, mais ce n'est pas forcément ainsi qu'on organiserait ça.


     


    Par exemple, tu as une hiérarchie Grade > Student. Sur iPad, on aurait par exemple un Navigation Controller, qui contiendrait une première table Grade. Quand on toucherait un Grade, la table des Students associés serait empilée dans le même Navigation Controller.


     


    Ensuite, pour les détails, tu n'aurais pas forcément 3 view controllers différents, mais un seul TableViewController avec plusieurs sections. (cela dit, moi je séparerais le data source en 3 sous-data sources, un par section).


     


    Je ne prétends pas que c'est exactement ça qu'il faut faire, mais tu vois l'idée; on dispose de moins de place sur iOS, ne serait-ce que parce que les éléments doivent être assez gros pour être touchés (>= 44 points), et on va afficher moins d'infos à  tout moment.


     


    P.S.: j'utilise de moins en moins les bindings sur OS X. Trop de problèmes.


  • Merci Céroce.


     


    Oui, je vois bien le problème de la place: c'est pour ça que j'exclus l'iPhone d'emblée. J'ai toujours considéré le message "envoyé de mon iPhone" comme une preuve de bravoure, vous vous rendez compte, les gars, j'ai les nerfs assez solides, la vue assez perçante et les doigts assez fins pour vous envoyer un message depuis un téléphone, certes de plus en plus gros mais tout de même...


     


    Le Navigation Controller, c'est ce truc avec des boutons tout fins en bleu, et donc quand ça glisse vers la droite on doit coder en dur un bouton qui permet de revenir vers la gauche, c'est ça?


     


    Du coup, ma fenêtre comportera trois "scènes": le choix du "Grade"  <glissement à  droite> la liste "Students" qui permet d'entrer les résultats <glissement à  droite> puis le choix des paramètres de calcul et <glissement à  gauche> la lecture des résultats?


     


    Bon, si c'est à  ce prix... mais est-ce que je n'ai pas avantage à  définir une "bottom bar" avec des icônes dans ce cas? Genre "Grade" "List" et "Parameters" ? Je dis ça, mais je trouve les "tabViews" déjà  agaçantes sur MacOS... On se retrouve dans une app très "modale" avec ça.


     


    En plus, j'en parle comme si j'avais la moindre idée de la façon de programmer ça, alors que pour le moment j'ai juste un TableViewController (le root donc) qui me permet d'ajouter ou de retirer un Grade... et ça me fait sauter de joie quand je vois que les changements sont répercutés dans le document ouvert sous MacOS...


  • AliGatorAliGator Membre, Modérateur
    février 2015 modifié #4


    J'ai toujours considéré le message "envoyé de mon iPhone" comme une preuve de bravoure, vous vous rendez compte, les gars, j'ai les nerfs assez solides, la vue assez perçante et les doigts assez fins pour vous envoyer un message depuis un téléphone, certes de plus en plus gros mais tout de même...

    Bah et Siri ça sert à  quoi ? 😉

    Quand j'ai de longs mails à  rédiger je ne me pose même pas la question 😉


    --

    Envoyé de mon iPhone et dicté avec Siri
  • AliGatorAliGator Membre, Modérateur


    et donc quand ça glisse vers la droite on doit coder en dur un bouton qui permet de revenir vers la gauche, c'est ça?

    Oula non pas besoin de t'embêter à  mettre le bouton toi-même ni même coder le retour à  écran précédent, iOS le fait tout seul pour toi, il n'y a rien mais écrire pour ça!
  • berfisberfis Membre
    mars 2015 modifié #6


    Bah et Siri ça sert à  quoi ?




    Siri ça sert à  appeler le restaurant chinois en pleine réunion de travail parce que tu as appuyé par mégarde sur ta poche, ou à  lancer à  tue-tête le morceau de musique débile dont tu t'étais promis de te débarrasser, un peu plus tard dans la même réunion de travail. J'en suis venu à  détester ce "plunk-plunk " Je n'ai pas compris ce que vous vouliez dire" alors que je ne lui ai rien demandé.


     


    Skynet et les terminators, c'est pour bientôt. 


  • AliGatorAliGator Membre, Modérateur

    Siri ça sert à  appeler le restaurant chinois en pleine réunion de travail parce que tu as appuyé par mégarde sur ta poche, ou à  lancer à  tue-tête le morceau de musique débile dont tu t'étais promis de te débarrasse, un peu plus tard dans la même réunion de travail. J'en suis venu à  détester ce "plunk-plunk " Je n'ai pas compris ce que vous vouliez dire" alors que je ne lui ai rien demandé.


    ??? Heu je sais pas comment tu te démerdes pour "appuyer par mégarde sur le bouton Home dans ta poche", faut quand même le vouloir... moi ça m'est jamais arrivé et je vois pas trop comment tu fais.

    Et sinon moi plus je l'utilise mieux il marche. Je dicte souvent mes SMS avec, ou je lui demande de me créer un RDV dans mon calendrier.
    (Le matin alors qu'il est encore branché sur ma table de nuit il m'arrive même de m'amuser à  lui demander "Dis Siri, quel temps fait-il aujourd'hui ?" pendant que je reviens de ma douche pour qu'il me réponde pendant que je choisis mes habits du jour en conséquence :D)
  • DrakenDraken Membre
    février 2015 modifié #8


    Skynet et les terminators, c'est pour bientôt. 




    Dans la saison 2 de l'excellente série tv "Les chroniques de Sarah Connor" des T1000 rebelles considèrent que Skynet est juste un gosse immature, terrorisé par la peur de mourrir. Ils envoient un agent (T1000) dans le passé pour créer une autre Intelligence Artificielle plus humaine. D'ailleurs HALL 9000 lui-même devient en partie humain dans le livre 3001, concluant la série 2001, l'odyssée de l'espace.



  • (Le matin alors qu'il est encore branché sur ma table de nuit il m'arrive même de m'amuser à  lui demander "Dis Siri, quel temps fait-il aujourd'hui ?" pendant que je reviens de ma douche pour qu'il me réponde pendant que je choisis mes habits du jour en conséquence :D)




    Idem mais avec une femme c'est beaucoup mieux... Ca me rappelle l'histoire de Raj dans Big Bang Theory  ;)


     


    Attention, Ali, quand tu auras confié toute ta domotique à  Siri, tu vas te retrouver enfermé dehors sous la neige, et ce dialogue risque fort de se produire:


    " Siri, je te prie d'ouvrir la porte extérieure A.


    " Je regrette, Dave, cela m'est malheureusement impossible."

Connectez-vous ou Inscrivez-vous pour répondre.