Créer un Fatbinary Universal (Intel64 et ARM64)

Codes specifiques à MacOS X
Ehma
Messages : 26
Inscription : dim. 24/juin/2018 19:01

Créer un Fatbinary Universal (Intel64 et ARM64)

Message 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.
Avatar de l’utilisateur
Mindphazer
Messages : 694
Inscription : mer. 24/août/2005 10:42

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

Message 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...
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Ehma
Messages : 26
Inscription : dim. 24/juin/2018 19:01

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

Message par Ehma »

Bonjour,
Merci pour ta suggestion.
Oui, bonne idée....
Bmld76
Messages : 116
Inscription : dim. 09/janv./2022 12:47

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

Message 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.
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5

PureBasic 6.11 MacOS
yves86
Messages : 39
Inscription : sam. 26/juil./2008 17:13
Localisation : Poitou

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

Message 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.
Répondre