Utiliser les modules Yoctopuce sur un Mac avec puce Apple

Utiliser les modules Yoctopuce sur un Mac avec puce Apple

Nous avons de plus en plus de clients qui utilisent nos produits sur des Macs équipés de processeurs Apple silicon (ARM). Nous allons voir cette semaine les implications que ces nouveaux systèmes ont sur nos produits.





La première chose à préciser est que ce changement de processeur n'a aucun impact sur la communication USB entre le Mac et nos modules. Nos modules utilisent le protocole USB HID et sont donc gérés nativement par l'OS et il n'y a donc aucun driver à modifier. De la même manière, les YoctoHubs utilisent des protocoles réseau standard et ne sont pas impactés par ces nouveaux processeurs.

Ce changement de processeurs impacte uniquement les applications qui sont exécutées sur la machine. Faisons donc un tour des applications qui utilisent nos modules.

Le VirtualHub


Le VirtualHub est complètement fonctionnel. Depuis la version 42982, il est même compilé en Universal binaries (UB) qui permet d'inclure une version optimisée pour les processeurs Apple.

La librairie en ligne de commandes


La librairie en ligne de commandes est complément fonctionnelle, mais n'est pas compilée en Universal binaries (UB). Les binaires qui sont inclus dans le fichier zip sont des binaires prévus pour les processeurs Intel, mais macOS exécute ces binaires à l'aide de Roseta 2 et il fonctionne aussi sur processeur Apple.

Nous avons fait ce choix, car la compilation UB génère des exécutables passablement plus gros et le gain de performance est minime. En effet, contrairement au VirtualHub, les utilitaires en ligne de commandes sont des exécutables qui ont une exécution très courte et passe la plupart du temps à attendre des paquets USB.

Si vous désirez utiliser une version optimisée pour Apple silicon, les sources de la librairie en ligne de commandes sont disponibles sur GitHub et sur notre site. Vous pouvez donc les recompiler avec les options de votre choix.

Les librairies C++ et Objective-C


Toutes les versions de ces deux libraires sont pleinement compatibles avec tous les processeurs. Comme ces librairies sont compilées en même temps que votre application, elles fonctionneront automatiquement avec votre application. Par défaut, Xcode génère les binaires UB, donc compatibles avec tous les processeurs.

Les librairies Python et Java


Pour ces librairies, c'est un petit peu plus compliqué. Ces librairies sont composées de la partie haut niveau écrite en Python ou Java, et d'une libraire dynamique (libyapi.dylib) qui est précompilée. La partie haut niveau ne pose pas de problème, mais il faut que la librairie dynamique soit compatible avec la machine virtuelle Python ou Java.

Depuis la version v1.10.49416, ces librairies incluent une version Universal binaries (UB) de libyapi.dylib. Depuis cette version, nos librairies sont donc compatibles avec les processeurs Intel et Apple.

Signature des binaires


La version Python installée sur les Macs avec des processeurs Apple est compilée avec la fonctionnalité Hardened Runtime. Cette fonctionnalité bloque le chargement de librairies dynamiques qui n'ont pas été approuvées.

Par conséquent, la première fois que vous utiliserez notre librairie Python, le code va planter avec le message d'erreur suivant:

code signature in <XXXXXXXXXXXXXX>; '../Sources/cdll/libyapi.dylib' not valid for use in process: library load disallowed by system policy



Pour approuver la librairie dynamique libyapi.dylib, il faut ouvrir les préférences système et accéder au panneau Sécurité et confidentialité. Dans l'onglet Géneral, vous verrez une note indiquant que libyapi.dylib est bloqué, car il ne provient pas d'un développeur non identifié. Il fait cliquer sur le bouton Autoriser quand même.

La première fois, il faut autoriser la librairie dynamique libyapi.dylib
La première fois, il faut autoriser la librairie dynamique libyapi.dylib



Une fois cette opération effectuée, la librairie dynamique sera acceptée par la machine virtuelle.

Solutions alternatives pour les anciennes librairies Yoctopuce


Notez que si vous avez un projet existant qui doit fonctionner sur Apple silicone, mais que vous ne désirez pas mettre à jour notre librairie, il est possible de contourner le problème en installant une version Intel de la VM.
Par exemple, il possible d'utiliser nos anciennes librairies Python sur un Mac Apple en installant une version Intel de Python 2.7. Lors de l'exécution, macOS utilisera Roseta 2 pour exécuter Python et notre librairie.

Conclusion


Malgré le changement de processeur sur les derniers Macs, il est toujours possible d'utiliser des modules Yoctopuce. Le seul problème de ces dernières machines est qu'Apple persiste à supprimer les ports USB-A. Pour ces machines, il faut donc utiliser un hub USB pour pouvoir connecter un périphérique USB standard, comme une clef USB, une souris ou un module Yoctopuce...



Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.