Problème, nous venons de créer une p-list contenant mes données dans mon dossier "Préférence" de mon ordinateur. Comment, en distribuant mon application cette p-list, sera aussi distribuée sur votre Macintosh.
Il faut inclure la p-list dans le Bundle.Un Bundle c'est quoi ? - Toutes applications Macintosh est distribuées dans un dossier qui peut s'ouvrir par clic droit ou "ctrl" clic. Il faut donc, mettre dans ce bundle, notre fichier p-list ou tous autres fichiers d'initialisation pour générer la p-list du dossier préférence.
Donc, il faut vérifier que c'est la première utilisation. Si oui, générer la p-list, qui n'existe pas, ou simplement la copier.
Comment savoir si c'est la première fois. Simple, il suffit de vérifier l'absence du fichier p-list dans votre catalogue. Si absent, la copier du bundle vers vos préférences.
Plusieurs étapes, sachant que le nom d'utilisateur, et de disque dur sont différent d'une machine à l'autre, et que vous avez mis l'application où cela vous plaisait :
Voici le code que Yvon Thoraval m'a expédié, encore merci à lui, car trouver ces informations dans la documentation d'Apple, que je ne qualifierai pas, est plus que le parcours du combattant.
Définissons les variables en property pour les conserver :
set resourceFolder to ((POSIX file (resource path of main bundle)) as string) & ":"
set defaultPrefsFile to resourceFolder & prefsFileName
Avec le nom de votre fichier préférence affecté par une commande "property".
property prefsFileName : "algClassic.plist" -- "com.legallou.CDClassic.plist" en final
Résultat :
"chemin d'accès du bundle.......:Resources:algClassic.plist"set userPrefsFolder to ((path to preferences folder from user domain) as string)
set userPrefsFile to userPrefsFolder & prefsFileName
Ajoutez le nom de votre fichier préférence défini par une commande "property".
property prefsFileName : "algClassic.plist" -- "com.legallou.CDClassic.plist" en final
Résultat :
"iMac:Users:alg:Library:Preferences:algClassic.plist"A partir du chemin d'accès en POSIX, le générer en alias conforme au Mac :
set defaultPrefsFileAlias to defaultPrefsFile as alias
Résultat :
-- "iMac:...:Resources:algClassic.plist" as aliasif fileExists(userPrefsFile) then.......
Avec le sous-programme :
Personnellement, je préfére créer à partir d'un fichier personnel, ce qui permet dans le même code de charger les Data Sources des tableaux en mémoire.
property prefsFileName : "algClassic.plist" -- "com.legallou.CDClassic.plist" en final
property resourceFolder : missing value
property userPrefsFolder : missing value
property userPrefsFile : missing value
property defaultPrefsFile : missing value
property firstUse : missing value
------ Check if it is the first time the application is running, if "yes" create the preference p-list --------
------ else load All_Author & Author Data Source --------------
--
if the name of theObject is "Main" then -------------- the Application CDClassic --------------
set resourceFolder to ((POSIX file (resource path of main bundle)) as string) & ":"
set defaultPrefsFile to resourceFolder & prefsFileName -- "iMac:...:Resources:algClassic.plist"
set userPrefsFolder to ((path to preferences folder from user domain) as string)
set userPrefsFile to userPrefsFolder & prefsFileName -- "iMac:Users:alg:Library:Preferences:algClassic.plist"
set defaultPrefsFileAlias to defaultPrefsFile as alias -- "iMac:...:Resources:algClassic.plist" as alias
if fileExists(defaultPrefsFile) then -- default in the bundle - it must exist in the package
-- display dialog ("defaultPrefsFile - " & defaultPrefsFile & " - exists.")
if fileExists(userPrefsFile) then -- not first time (Library:preference exist)
set firstUse to "no"
else -- first time - move plist from the bundle to :Library:preference"
set firstUse to "yes"
tell application "Finder" to duplicate (defaultPrefsFile as alias) to folder userPrefsFolder
log ("Library:preference file doesn't exists.")
end if
else -- Bug the plist init does not exist in the bundle
display dialog (" SYSTEM ERROR : defaultPrefsFile - " & defaultPrefsFile & " - doesn't exists.")
end if
end if
--------------------------------------------------------------------
on fileExists(file_name) --------------------------------------------------------------------
-- Requested for the generation of the bundle alias
tell application "Finder" to return exists file file_name
end fileExists ------------------------------------------------------------------------------
Mais, mais il manque quelque chose ! Comment met-on les fichiers dans le bundle.
Dragger and Dropper vos fichiers sur l'icône du dossier ou dans le dossier "Resources" de xCode. Un Pop-Up menu s'ouvre. Cocher "Copy items into destination group's folder"
Et cliquer sur le bouton ADD.