Créer un Fatbinary Universal (Intel64 et ARM64)
Publié : jeu. 15/juin/2023 12:54
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 :
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.
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>
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.