12/11/07
rendre Prism portable sous Mac OS X

Pour commencer, Prism est un projet issu des labos de la fondation Mozilla. Prism, un moteur reposant sur les mécanismes de Firefox, permettra de faire fonctionner des services Web (Gmail, Facebook, Yahoo Mail, etc) non plus seulement au travers du navigateur mais comme des applications classiques.
Mais voilà, ces fameuses applications ne sont pas portables nativement, puisque le chemin vers Prism est renseigné en dur.
Admettons que vous vouliez une application Prism pour consulter votre webmail Gmail, le contenu de votre application, baptisée Gmail (lors de sa création automatisée via l'interface de Prism), devrait ressembler à ceci :
Gmail.app/Content/MacOS/Gmail
#!/bin/sh exec /Applications/Prism.app/Contents/MacOS/xulrunner -webapp gmail@prism.app
On se rend compte, aisément, que vous ne pourrez pas emporter votre Prism et votre application Gmail.app sur une clef USB ; ni même déplacer Prism à votre guise sur votre disque sans que ça ne compromette le fonctionnement des applications (lanceurs) en dépendant… c'est un peu dommage.
Modifications
Or, Mac OS X peut savoir (assez) précisément où se trouvent les applications, notamment grâce à la clef CFBundleIdentifier, il s'avère que cette clef est absente du Info.plist de Prism, il faut donc commencer par l'y ajouter :
Prism.app/Contents/Info.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleExecutable</key> <string>xulrunner</string> <key>NSAppleScriptEnabled</key> <true/> <key>CFBundleGetInfoString</key> <string>Prism 0.8</string> <key>CFBundleName</key> <string>Prism</string> <key>CFBundleShortVersionString</key> <string>0.8</string> <key>CFBundleVersion</key> <string>0.8.20071010</string> <key>CFBundleIconFile</key> <string>webrunner</string> <key>CFBundleIdentifier</key> <string>com.apple.xulrunner.prism</string>
ensuite, nous revenons à notre application, Gmail.app (exemple), et nous la modifions comme suit :
Gmail.app/Content/MacOS/Gmail
#!/bin/sh xulrunner=`echo | osascript -e "try tell application \"Finder\" to return POSIX path of (((application file id \"com.apple.xulrunner.prism\") as Unicode text) & \":Contents:MacOS:xulrunner\") on error m beep display dialog m with icon 0 with title \"Prism\" buttons {\"OK\"} return "" end try"` if [ -n "$xulrunner" ] then exec "$xulrunner" -webapp gmail@prism.app fi exit
L'application Gmail.app est devenue déplaçable (mais pas encore portable) et fonctionnera ; pour peu que Prism se trouve sur un volume connecté à la machine… pour la portabilité, il faudrait voir à embarquer le profil dans Prism, à l'étude pour voir si c'est possible.