Page 1 sur 1

Créer un Fatbinary Universal (Intel64 et ARM64)

Publié : jeu. 15/juin/2023 12:54
par Ehma
Bonjour,

Il est peu commode de devoir distribuer ses applications en deux exemplaires selon que l'on se destine à Apple Silicon ou Intel, de ce fait, comme Apple à toujours proposé la possibilité de générer des exécutables FatBinay, voici ce qu'il en est pour PureBasic :

Il faut savoir ce qu'est un bundle ; un bundle est un dossier exécutable qui se termine par .app et qui contient le sous dossier Content, lui même contenant un sous dossier nommé MacOS qui lui contient l'exécutable

Bonne nouvelle, ce n'est pas lié au compilateur, mais à un assemblage de 2 exécutables et ceci fonctionne donc pour tous les compilateurs.

1) Il faut créer 2 versions de l'exécutables (avec des noms légèrement différents), une en Intel et l'autre en ARM (il faut donc les 2 versions de Purebasic)

2) il faut les fusionner avec l'instruction (dans un terminal):
[syntax]lipo -create chemin_vers_executable_ARM -arch x86_64 chemin_vers_executable_Intel -output chemin_vers_executable_universel[/syntax]

En suite prendre un un des deux bundles (fichier.app) afficher le contenu et remplacer le contenu de MacOS par le nouvel exécutable

3) Ensuite, il faut éditer le fichier info.plist qui se trouve dans le package .../NomApplication.app/Content/info.plist
et insérer ceci dans la clé dict

[syntax]
<key>LSArchitecturePriority</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
[/syntax]

Exemple :

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <!-- Autres clés et valeurs du fichier Info.plist -->
    ...
    <key>LSArchitecturePriority</key>
    <array>
        <string>arm64</string>
        <string>x86_64</string>
    </array>
    <!-- Autres clés et valeurs du fichier Info.plist -->
    ...
</dict>
</plist>
Voilà, en plus ça fait très pro, car tout le monde ne connait pas l'astuce.

On dit merci qui ?
Non, pas Jacky et Michel, mais ChatGPT. Si pour écrire du code Purebasic il est un peu nul, pour rechercher l'info, il est plutôt bon.

Re: Créer un Fatbinary Universal (Intel64 et ARM64)

Publié : ven. 16/juin/2023 11:15
par Mindphazer
Bonjour,
y'a pas foule sur MacOS sur le forum français, mais y'a un peu plus d'animation sur le forum anglais... Tu devrais poster cette info (intéressante au demeurant) là-bas...

Re: Créer un Fatbinary Universal (Intel64 et ARM64)

Publié : mar. 20/juin/2023 9:28
par Ehma
Bonjour,
Merci pour ta suggestion.
Oui, bonne idée....

Re: Créer un Fatbinary Universal (Intel64 et ARM64)

Publié : dim. 03/déc./2023 9:54
par Bmld76
Bonjour,

Intéressant, mais quand je diffuse une appli M1, celle-ci ne peux être exécutée sur un autre Mac n'étant pas référencé developpeur.. Je suppose que cela ne supprime pas ce problème.

Re: Créer un Fatbinary Universal (Intel64 et ARM64)

Publié : ven. 31/janv./2025 14:25
par yves86
il faut les fusionner avec l'instruction (dans un terminal):
[syntax]lipo -create chemin_vers_executable_ARM -arch x86_64 chemin_vers_executable_Intel -output chemin_vers_executable_universel[/syntax]
Bonjour,
Merci, cela fonctionne très bien, mais il faut fusionner les exe qui se trouve dans appli.app/Contents/MacOS

J'ai cherché un moment avant de comprendre pourquoi cela ne fonctionnait pas.