Lorsqu'on fait du développement iOS depuis Delphi ou C++Builder il est plus simple d'avoir un appareil de test à connecter à notre Mac de développement que d'utiliser le simulateur iOS inclu avec Xcode. Le hic, c'est que si on n'a pas de Mac sous la main, on ne peut rien faire.
C'est le cas avec les solutions de location de Mac en ligne comme par exemple celles de MacinCloud ou de Scaleway. Pour contourner le problème il existe des solutions plus ou moins faciles à mettre en oeuvre et plus ou moins coûteuses.
Lors du Delphi Live on Twitch du 4 mars 2021 j'ai pu montrer l'une de ces solutions que je vais détailler ici car c'est la moins cher et surtout la plus simple à mettre en oeuvre en réseau local comme avec un Mac comme serveur.
Utiliser un port appareil USB distant sur un réseau TCP/IP
J'avais découvert ça avec Shadow qui proposait de louer des PC de gamer en y connectant tous les périphériques que l'on veut. Le report de périphérique USB via IP était possible mais j'ignorais que c'était aussi répandu.
Il y a tout d'abord des hubs USB réseau qui se rattachent à leur ordinateur par l'intermédiaire d'un réseau ethernet. Bien entendu il faut un driver côté ordinateur pour qu'il voit le hub réseau et puisse travailler avec. Ce n'est pas très adapté à notre cas et de toute façon ils ne proposent pas de driver pour macOS donc cette solution n'est pas pour nous.
Viennent ensuite des logiciels que l'on trouve en cherchant "USB over IP" sur un moteur de recherche. J'en ai recensé 4 :
NoMachine n'est pas à proprement parler un logiciel de partage de ports USB sur réseau IP, mais il le permet et c'est celui que j'ai finalement réussi à utiliser, d'où sa présence ici.
Flexihub
Flexihub fonctionne sur un abonnement payant. On dépend d'un compte sur leur site depuis lequel on référence nos ordinateurs. Leur logiciel permet de déclarer quels périphériques USB on veut partager vers les autres et quels périphériques on veut utiliser depuis une connexion distante.
Sur le principe ça a l'air efficace et ce système permet de contourner les classiques problèmes de pare-feu et de routeurs. Pas besoin de déclarer de redirections de ports car on ne fait que de l'accès sortant vers Internet lors de l'ouverture des sockets réseau.
Ce logiciel est disponible pour plusieurs systèmes d'exploitation dont Windows et macOS.
Le site n'annonce pas de période d'évaluation. Le prix (150USD par an) est un peu exagéré juste pour un test. Ne sachant pas s'il fonctionnerait à la fois sur un Mac à processeur Intel et un Mac à processeur Apple Silicon, je ne l'ai pas essayé.
USB Network Gate
Autre approche avec USB Network Gate dont l'éditeur a très bien compris comment spammer les moteurs de recherche avec des sites plus ou moins bidons suggérant que son logiciel est le meilleur (parfois en faisant un comparatif entre lui et d'autres versions venant du même éditeur).
On est sur de la connexion directe entre appareils. Le logiciel sert à la fois de serveur de ports USB partagés et de client permettant leur utilisation.
Au moment de mes tests ils ne prenaient pas encore en charge la partie client sur macOS BigSur Apple Silicon mais y travaillaient. La partie serveur était en revanche fonctionnelle.
Le logiciel est multiplateforme et pourrait donc être utilisé dans notre cadre : développeur Windows désireux de partager son iPhone (ou autre) vers un Mac à distance.
Côté tarif c'est assez spécial mais au moins c'est un coût unique sans abonnement. Ils facturent en fonction du nombre de périphériques USB à partager en même temps. Seul le serveur doit être activé. On peut avoir plusieurs ordinateurs clients. Ca qui colle à notre cas de location ponctuelle de différents appareils avec installation d'un client à chaque fois. En revanche, si on a plusieurs appareils (iPhone, iPad, clé USB, ...) à connecter c'est un peu rébarbatif avec la licence de base. Il faut donc plutôt tabler sur plusieurs appareils partagés et le prix n'est pas indiqué.
Ils proposent également d'acheter les sources de leur logiciel aux entreprises désireuses de le personnaliser ou l'intégrer dans le leur.
Une période d'essai de quelques jours est proposée lors du partage du premier appareil.
J'ai eu des soucis de configuration lors de mes essais mais j'ai quand même réussi à montrer l'iPad à Xcode sur un Mac chez MacinCloud depuis mon ordinateur. En revanche pas moyen de faire de compilation et transfert des données dessus. Xcode le voyait mais ne pouvait pas s'y connecter.
C'est potentiellement à cause d'une erreur de ma part sur l'ouverture de ports sur ma box Internet; les explications fournies sur le site de USB Network Gate étant assez concises.
Virtual Here
Virtual Here fonctionne sur le même principe : un logiciel client (bizarrement celui qui partage les périphériques) et un logiciel serveur (qui les utilise). Il est commercialisé pour à peine 50USD ce qui serait très bien pour un développeur désireux de s'en servir ponctuellement.
J'ai voulu le tester avec le Mac mini M1 loué chez Scaleway et comme une contrainte de configuration ne lui permettait pas de fonctionner je n'ai même pas essayé avec le Mac loué chez Macincloud. A mon avis il faudrait lui redonner une chance.
C'est de la communication en direct entre logiciels il est donc aussi nécessaire de jouer avec les partages de port sur votre routeur et de bien configurer votre firewall.
Si vous voulez utiliser des ports USB distants avec ce logiciel depuis un Mac Apple Silicon, vous devrez saisir une ligne de commande dans le paramétrage de l'appareil (équivalent du BIOS), ce qui n'est pas possible sur les appareils loués en ligne.
Utiliser NoMachine pour partager des appareils et prendre la main à distance
Je me suis finalement rabattu sur NoMachine qui est un logiciel de "bureau à distance". Basé sur les mêmes principes que des moteurs de machines virtuelles, il intègre leurs avantages : la possibilité de déporter quasiment tout des appareils locaux vers la VM.
- L'appareil local est l'ordinateur depuis lequel on se connecte vers un autre.
- La VM, qui n'en est pas une, est l'ordinateur dont on veut prendre le contrôle.
Le fonctionnement est globalement le même que pour TeamViewer ou AnyDesk mais en travail direct sur des adresses IP sans avoir de serveur central sur lequel tous les appareils se référencent. Il peut donc être utilisé sur un réseau local hermétique.
Il permet de partager les périphériques USB, l'audio et la vidéo, faire des enregistrements des sessions et a tout un tas de fonctionnalités liées au format d'affichage ou au type de connexion distante.
Côté coût, c'est assez génial : gratuit pour un usage personnel et à partir de 44,50USD pour un utilisateur en entreprise.
NoMachine est clairement un logiciel multiplateforme avec ses versions Windows, macOS, Linux, Raspberry Pi, iOS et Android aux fonctionnalités adaptées selon la plateforme et les libertées laissées aux développeurs.
Passée la phase de compréhension des formats d'écran pour avoir la fenêtre de la bonne taille je n'ai eu aucune difficulté à utiliser les fonctionnalités de bureau à distance.
Sur le Mac mini M1 l'écran était renversé (le bas en haut, le haut en bas). J'ignore d'où ça vient et leur ai signalé.
Le partage de ports se configure très simplement depuis le poste distant qui affiche l'écran de configuration local avec la liste des choses pouvant être partagées. On coche et c'est dispo.
Malheureusement, là encore, la configuration de base des Mac mini M1 n'a pas permis de travailler avec ce logiciel. Il utilise les extensions du système qui sont par défaut désactivées dans la configuration d'usine. J'en rediscuterai avec les équipes de Scaleway qui pourront peut-être y faire quelque chose si ça n'a pas d'impact sur l'infra réseau ou la sécurité du matériel. Pouvoir passer par là serait un gros plus pour tous les développeurs iOS désireux de travailler avec leurs vrais smartphones ou tablettes.
Quoiqu'il en soit choisir NoMachine me semble être le plus logique pour travailler avec les "Mac Intel" disponibles en location et pour travailler sur un réseau local en remplacement de solutions beaucoup plus coûteuses en argent (NDLR : coucou TeamViewer) ou en ressources réseau !