Marzipan : on a porté notre app iOS sur le Mac en un après-midi

Stéphane Moussie |

La WWDC 2019 serait-elle déjà terminée ? On peut se poser la question à la vue des portages d’apps iOS vers le Mac qui fleurissent d’ores et déjà. Alors qu’Apple a prévu de dévoiler plus en détail le mois prochain Marzipan, la communauté ne l’a pas attendue.

Guidés notamment par le bidouilleur de génie Steven Troughton-Smith, des développeurs tiers expérimentent la conversion de leurs apps mobiles vers le système de bureau. On est en mesure de vous confirmer que ça marche : notre application iOS iGeneration tourne comme un charme sur Mac.

De Marzipan…

Un petit rappel sur Marzipan est nécessaire. Marzipan, c’est le nom de code du projet qui vise à rendre disponible sur macOS le framework UIKit permettant de construire des applications iOS. UIKit est un framework applicatif qui forme la couche la plus haute du système, qui gère la manière dont les applications réagissent aux demandes du système et de l’utilisateur. Résumé très brièvement, il permet de créer une interface dynamique.

macOS avait jusque-là son propre framework applicatif, AppKit, qui reste d’ailleurs son framework par défaut. UIKit est une brique supplémentaire mise à disposition des développeurs. Le projet Marzipan permet au bout du compte aux développeurs iOS de porter facilement leurs applications vers macOS.

Lors de la WWDC 2018, Craig Federighi a présenté les grandes lignes du projet et a donné rendez-vous à l’année suivante pour les détails et les outils permettant d’accomplir le portage.

Apple a commencé à adapter UIKit, un framework conçu à l’origine pour une utilisation tactile, à un environnement de bureau (prise en charge de la souris, des barres de défilement, du glisser-déposer, etc.).

Apple a tout de même livré des amuse-gueules dans macOS Mojave. Les nouvelles applications Maison, Bourse, Dictaphone et News sont issues du projet Marzipan : ce sont des portages des versions iOS. Il n’en fallait pas plus pour que le développeur Steven Troughton-Smith parvienne à mettre au point son propre « convertisseur » d’apps iOS en apps macOS — ce n’est pas le seul, mais c’est le plus avancé.

… à marzipanify

Par un travail de rétro-ingénierie détaillé dans une série de billets de blog ainsi que de nombreux tweets, le bidouilleur de l’extrême a créé marzipanify, un outil open source qui réalise automatiquement plusieurs tâches principales :

  • il repackage l’app iOS dans un format compatible avec macOS
  • il redirige tous les liens du framework UIKit iOS vers le framework UIKit macOS
  • il modifie l’en-tête Mach des binaires
  • il modifie le fichier Info.plist qui contient les métadonnées de l’app
  • il signe l’app avec les droits liés à macOS (notifications push, iCloud…)

Pour convertir notre application mobile, Laurent, notre développeur iOS émérite, a suivi le guide de PSPDFKit. Sans trop entrer dans les détails techniques (ils sont décrits par le menu par les créateurs de PDF Viewer), on peut noter plusieurs choses à propos du processus de conversion avec marzipanify.

marzipanify en action

D’abord, il faut que l’app « vise » iOS 12 comme version d’iOS nécessaire au minimum. Ensuite, et c’est le plus gros du travail, il faut retirer de l’app de nombreux frameworks additionnels. Les frameworks publicitaires et ceux qui ajoutent des fonctionnalités personnalisées ne peuvent pas être convertis, pour la bonne raison qu’Apple n’a pas encore prévu ce cas. De même, il faut retirer tous les frameworks iOS natifs pour lesquels il n’y a pas d’équivalent sur macOS (c’est notamment le cas des fonctions liées au téléphone et aux messages).

Si on oublie de retirer un framework non pris en charge, l’app « marzipanifiée » plante au démarrage. Il faut prendre sa tronçonneuse et élaguer jusqu’à avoir simplement le tronc de l’app. Il faut d'ailleurs que ce tronc soit suffisamment moderne pour que le portage soit un succès : si le code contient des éléments obsolètes (la classe UIWebView à la place de la nouvelle classe WKWebView pour afficher une vue web, par exemple), l’application ne fonctionnera pas sur Mac.

Une fois que tout cet élagage est effectué et que d’autres petits soucis sont réglés, on obtient iGeneration.app… qu’il n’est pas possible d’ouvrir en l’état sur macOS. Il est nécessaire de désactiver deux mesures de sécurité (SIP et le sandboxing des applications) en saisissant deux lignes de commandes depuis la partition de restauration du système. C’est après cette étape que l’on peut ouvrir iGeneration iOS sur Mac.

Hello again !

Les fonctions de base de l’application répondent à l’appel. On peut parcourir la liste des articles, les marquer en favoris et en lus/nons lus, lire les articles et les commentaires, passer en mode nuit, agrandir la vue article… Il est possible d’ouvrir les liens internes (menant vers d’autres articles d’iGeneration), mais pas les liens externes.

Naviguer à la souris dans cette interface n’est pas si étrange que ça. Le geste à deux doigts sur le trackpad ou la souris pour faire défiler le contenu à la verticale fonctionne comme on s’y attend. Il fonctionne également à l’horizontale pour passer de la vue article aux commentaires.

Les comportements propres à macOS sont gérés. Pêle-mêle, on peut redimensionner librement la fenêtre, la passer en Split View ou en plein écran, ainsi que la minimiser dans le Dock. Les raccourcis clavier ne sont pas de la partie en revanche et on n'échappe pas à quelques plantages.

iGeneration en Split View sur Mac avec Safari

Laurent est parvenu à ce résultat en seulement un après-midi ! Avant même qu’Apple ne fournisse la documentation et les outils officiels, cette expérimentation confirme que Marzipan va considérablement faciliter le portage des apps iOS vers le Mac. Le développeur Guilherme Rambo, épaulé par Steven Troughton-Smith, affirme que l’opération se résumera à cocher une case dans Xcode quand elle sera finalisée.

Aussi avancé soit-il, marzipanify ne dit pas tout de la stratégie d’Apple et de ses conséquences. Jusqu’où va aller l’intégration des apps iOS dans macOS (la gestion de la Touch Bar, de la barre des menus et des raccourcis claviers sont apparemment prévus pour la première version) ? Marzipan va-t-il niveler les apps Mac vers le bas, comme le craignent certains ?

Des dizaines de développeurs, sinon plus, sont en tout cas dans les starting-blocks pour participer à cette nouvelle aventure. La WWDC 2019 s’annonce excitante.

avatar bpisano | 

Détail notable : il n’y a pas la Tabbar en bas. Impressionnant en tout cas. Vivement macOS 10.15 pour avoir cette app sur Mac !

avatar s0ta | 

Oui en l'état il faut manuellement convertir la tabBar en tabView.

avatar LaurentH | 

il n’y a pas la Tabbar en bas

Oui exact, pourtant tout le code est là...

avatar s0ta | 

@LaurentH

Je ne pense pas que la tabBar sera adaptée.
En l'état il semble qu'il faut créer une tabView qui place les tabs en haut de la fenêtre.

avatar iPop | 

@s0ta

Ou trouver le moyen de la remplacer. Éclairer l’ensemble.

avatar macbook60 | 

@LaurentH

Bravo Laurent
Bien joué

avatar reborn | 

Il est où le lien pour télécharger macg macOS ?

🙃

avatar pga78 | 

@reborn

Oui je suis preneur 😜

avatar Olivier Berard | 

Vivement le 3 Juin

avatar iKalimero | 

Etape suivante la suppression des processeurs Intel, it’s true

avatar frankm | 

@iKalimero

Et l’iPadisation du Mac. Happy face please

avatar romain_bdrt | 

Tout cela prendrai du sens si une solution « tactile » venait à venir sur le court terme sur les équipements sous MacOS.

avatar rolmeyer | 

@romain_bdrt

Pas forcément. Si tu as des enfants tu vois qu’il y a une génération née avec iOs, ces futurs acheteurs pourront être séduit par une interface commune et connue, pour acheter un mac, autrement que par le fait de vouloir la marque.

avatar romain_bdrt | 

@rolmeyer

Oui je suis d’accord avec toi mais une application conçue pour une interface tactile doit avoir une ergonomie bien différente pour qu’elle devienne agréablement et facilement utilisable.

avatar MMathieu | 

@romain_bdrt

+1

avatar Kounkountchek | 

Moi ça me conforte dans l’idée qu’un iPad branché a un écran externe devrait pouvoir fonctionner comme cela. Un mode desktop, pilotable au clavier/souris, avec fenêtre d’app redimensionnables etc...

avatar pagaupa | 

Et voilà! Fusion des Os enclenchée...

avatar reborn | 

J’ai une question pour macg, vous allez retravailler l’UI pour votre app macOS ou bien vous allez la laisser avec son UI hérité d’iOS ?

avatar LaurentH | 

vous allez la laisser avec son UI hérité d’iOS ?

Je pense que initialement ça se verra que le code base est celui d'une app iOS.

avatar Amaczing | 

@LaurentH

Félicitations 🎉🎈🎊

avatar pakal | 

Sans vouloir être rabat-joie je trouve que ça ne fait pas rêver.
On perd la spécificité des app 100%Mac
On a juste une app ios qui marchent sur macos.
C'est pas mal mais niveau ergonomie on dirait une appli Java ou kde portée sur mac.

avatar pim | 

@pakal

Idem pour moi. C’est l’inverse qu’il faudrait : porter les apps Mac sous iOS, et libérer l’iPad, c’est-à-dire lui permettre de se comporter comme un Mac ordinaire une fois connecté une souris et un clavier. Avec support des clefs USB, des disques durs et des écrans externes. Ça serait bien mieux qu’attendre un hypothétique Mac sous ARM ou même un hypothétique Mac à écran tactile. On a déjà tout ça, il faut juste libérer la potentialité de l’iPad en le laissant faire tourner macOS.

Et laisser le Mac tranquille : un vrai clavier qui résiste aux miettes, plusieurs ports pour pouvoir brancher plus d’un périphérique à la fois tout en le rechargeant, de vraies applications de productivité et pas des copies d’app de consultation pensées pour iOS, et des processeurs Intel pour pas se retrouver à devoir changer toute les apps. La convergence vers le moins disant par souci de simplicité pour les nouveaux adoptants, ce n’est pas très pertinent.

avatar pagaupa | 

@pim

+1000 👏

avatar oomu | 

oui.

avatar melen | 

@Pim
👏🏻

Pages

CONNEXION UTILISATEUR