{"id":34,"date":"2011-03-14T09:26:00","date_gmt":"2011-03-14T09:26:00","guid":{"rendered":"http:\/\/www.renaudpradenc.com\/?p=34"},"modified":"2013-01-17T15:34:25","modified_gmt":"2013-01-17T14:34:25","slug":"portraimatic-ipad-2","status":"publish","type":"post","link":"https:\/\/www.renaudpradenc.com\/?p=34","title":{"rendered":"PortraiMatic iPad (2): Reprendre le code de la version Mac\u00a0?"},"content":{"rendered":"<p>C&#8217;est d\u00e9cid\u00e9, je vais convertir PortraiMatic du Mac \u00e0 l&#8217;iPad. Mais par o\u00f9 commencer ?<\/p>\n<h1>Faut-il reprendre le code de la version Mac\u00a0?<\/h1>\n<p>Il s&#8217;agit d&#8217;une question \u00e9conomique, \u00e0 savoir: sachant que les biblioth\u00e8ques de d\u00e9veloppement Mac et iOS poss\u00e8dent de nombreuses similitudes, peut-on partager les fichiers sources entre les deux plateformes\u00a0? Apr\u00e8s tout, le langage de programmation est le m\u00eame, et Cocoa Touch est une adaptation de Cocoa Mac. Et si la r\u00e9ponse est positive, est-ce que la lourdeur structurelle (mise en place sous Xcode) n&#8217;an\u00e9antis pas le b\u00e9n\u00e9fice de cette r\u00e9utilisation?<\/p>\n<h1>Le gros du code concerne l&#8217;IHM<\/h1>\n<p>L&#8217;Interface Homme-Machine repr\u00e9sente une grosse proportion dans PortraiMatic. Or, il s&#8217;agit probablement d&#8217;une des plus grosses diff\u00e9rences entre Mac OS et iOS. D&#8217;un c\u00f4t\u00e9, nous utilisons App Kit, de l&#8217;autre UIKit. Il ne s&#8217;agit pas d&#8217;une simple adaptation: les ing\u00e9s d&#8217;Apple l&#8217;ont repens\u00e9 pour l&#8217;utilisation avec un \u00e9cran tactile et l&#8217;ont grandement modernis\u00e9.<\/p>\n<p><a href=\"https:\/\/www.renaudpradenc.com\/?attachment_id=213\" rel=\"attachment wp-att-213\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-213\" alt=\"PM_ReframeView\" src=\"https:\/\/www.renaudpradenc.com\/wp-content\/uploads\/2011\/03\/PM_ReframeView.jpg\" width=\"319\" height=\"465\" srcset=\"https:\/\/www.renaudpradenc.com\/wp-content\/uploads\/2011\/03\/PM_ReframeView.jpg 319w, https:\/\/www.renaudpradenc.com\/wp-content\/uploads\/2011\/03\/PM_ReframeView-205x300.jpg 205w\" sizes=\"auto, (max-width: 319px) 100vw, 319px\" \/><\/a><\/p>\n<p>Par exemple, je sais d&#8217;avance que je vais devoir reprogrammer enti\u00e8rement la vue qui sert \u00e0 recadrer les portraits. Or, il s&#8217;agit de la classe la plus complexe de PortraiMatic Mac.<\/p>\n<h1>Pas de bindings<\/h1>\n<p>Les Bindings sont une des technologies les plus utiles, mais \u00e9galement les plus complexes qui existe sur Cocoa Mac. Cette technologie synchronise l&#8217;\u00e9tat des vues (ce qui appara\u00eet \u00e0 l&#8217;\u00e9cran) et l&#8217;\u00e9tat interne (couche &#8216;m\u00e9tier&#8217;). PortraiMatic en fait grand usage, entre autres parce qu&#8217;elle r\u00e9duit les d\u00e9pendances entre classes, et donc la complexit\u00e9 de l&#8217;architecture. Pour des raisons de performances, je pense, cette technologie n&#8217;a pas (encore) trouv\u00e9 son chemin dans Cocoa Touch. Il existe des alternatives, mais cela signifie \u00e0 nouveau que de grand pans du code ne peuvent pas \u00eatre r\u00e9utilis\u00e9s.<\/p>\n<h1>Pas de Core Image<\/h1>\n<p>Core Image est ma technologie pr\u00e9f\u00e9r\u00e9e dans Mac OS X. Elle permet d&#8217;appliquer des effets sur les images voire de g\u00e9n\u00e9rer des images. C&#8217;est une technologie \u00e0 la fois performante, facile \u00e0 utiliser et extensible. Malheureusement, elle n&#8217;a pas encore \u00e9t\u00e9 port\u00e9e sous iOS, m\u00eame si je ne doute pas que cela sera fait prochainement. En cons\u00e9quence, j&#8217;ai d\u00e9cid\u00e9, dans un premier temps, de ne pas inclure de fonctions de corrections de couleurs dans la version iPad. Non, pas que ceci me poserait de probl\u00e8me particulier (la programmation graphique est ma sp\u00e9cialit\u00e9), mais je veux publier l&#8217;application rapidement.<\/p>\n<h1>Gestion des fichiers<\/h1>\n<p>La gestion des fichiers dans PortraiMatic est \u00e0 la fois un motif de satisfaction \u2014 parce qu&#8217;elle est maintenant bien au point \u2014 et une inqui\u00e9tude \u00e0 chaque nouvelle version pour s&#8217;assurer de la compatibilit\u00e9 avec les versions pr\u00e9c\u00e9dentes. Elle pr\u00e9sente quelques d\u00e9tails malins. Tout d&#8217;abord, la &#8220;galerie&#8221; est un bundle, c&#8217;est \u00e0 dire un dossier qui appara\u00eet comme un fichier sous Finder. On peut l&#8217;ouvrir sous Finder, par un clic droit &gt; Afficher le contenu du paquet, et constater que chaque portrait poss\u00e8de son dossier:<\/p>\n<p><a href=\"https:\/\/www.renaudpradenc.com\/?attachment_id=214\" rel=\"attachment wp-att-214\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-214\" alt=\"PM_BundleGalerie\" src=\"https:\/\/www.renaudpradenc.com\/wp-content\/uploads\/2011\/03\/PM_BundleGalerie.jpg\" width=\"604\" height=\"287\" srcset=\"https:\/\/www.renaudpradenc.com\/wp-content\/uploads\/2011\/03\/PM_BundleGalerie.jpg 604w, https:\/\/www.renaudpradenc.com\/wp-content\/uploads\/2011\/03\/PM_BundleGalerie-300x142.jpg 300w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/a><\/p>\n<p>Chaque dossier comporte l&#8217;image utilis\u00e9e par le portrait et un fichier Portrait.plist qui d\u00e9crit les param\u00e8tres du portrait (recadrage, correction des couleurs). Cette organisation s&#8217;est r\u00e9v\u00e9l\u00e9e pratique en cas de probl\u00e8me (on peut mettre un dossier \u00e0 la corbeille), plus simple \u00e0 d\u00e9boguer (on voit imm\u00e9diatement si les donn\u00e9es ont \u00e9t\u00e9 enregistr\u00e9es). Elle a aussi permis de mettre en \u0153uvre facilement la fusion des galeries de deux utilisateurs. Cependant, je vais passer \u00e0 Core Data pour enregistrer les donn\u00e9es.<\/p>\n<p>Core Data permet de d\u00e9crire le mod\u00e8le (la partie &#8220;m\u00e9tier&#8221;) de l&#8217;application de fa\u00e7on graphique et de stocker les informations dans une base de donn\u00e9es SQLite de fa\u00e7on transparente. J&#8217;en attends des simplifications de l&#8217;architecture et une baisse de volume du code source. Par ailleurs, elle devrait r\u00e9gler mes soucis de migration d&#8217;une version \u00e0 l&#8217;autre, en m&#8217;obligeant \u00e0 d\u00e9crire pr\u00e9cis\u00e9ment les \u00e9volutions de chaque version.<\/p>\n<h1>\u00c0 l&#8217;heure du choix<\/h1>\n<p>Finalement, je constate que peu de code peut \u00eatre repris; si n\u00e9cessaire, je dispose toujours de la possibilit\u00e9 de copier-coller du code. Je n&#8217;ai franchement pas envie de m&#8217;engager dans des probl\u00e8mes d&#8217;inclusions de fichier d&#8217;un projet Xcode \u00e0 l&#8217;autre. Il me semble donc plus opportun de ne pas partager de fichiers entre les versions Mac et iPad, et de cr\u00e9er un projet Xcode tout neuf.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>C&#8217;est d\u00e9cid\u00e9, je vais convertir PortraiMatic du Mac \u00e0 l&#8217;iPad. Mais par o\u00f9 commencer ? Faut-il reprendre le code de la version Mac\u00a0? Il s&#8217;agit d&#8217;une question \u00e9conomique, \u00e0 savoir: sachant que les biblioth\u00e8ques de d\u00e9veloppement Mac et iOS poss\u00e8dent de nombreuses similitudes, peut-on partager les fichiers sources entre les deux plateformes\u00a0? Apr\u00e8s tout, le [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[37,36,27,34],"class_list":["post-34","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-adaptation","tag-cocoa-mac","tag-cocoa-touch","tag-portraimatic"],"_links":{"self":[{"href":"https:\/\/www.renaudpradenc.com\/index.php?rest_route=\/wp\/v2\/posts\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.renaudpradenc.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.renaudpradenc.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.renaudpradenc.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.renaudpradenc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=34"}],"version-history":[{"count":4,"href":"https:\/\/www.renaudpradenc.com\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions"}],"predecessor-version":[{"id":104,"href":"https:\/\/www.renaudpradenc.com\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions\/104"}],"wp:attachment":[{"href":"https:\/\/www.renaudpradenc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=34"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.renaudpradenc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=34"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.renaudpradenc.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}