2010-01-07 6 views
1

J'ai écrit deux applescripts pour que ma femme puisse lancer mt-daapd et l'éteindre facilement. Ils fonctionnent correctement dans l'application Éditeur de scripts, mais lorsque je les compile dans des applications autonomes, les applications fonctionnent la première fois que je les teste. Puis ils m'embarrassent comme je les montre fièrement à ma femme. Je vois l'animation "ouverte" et ensuite ils restent assis là. J'ai créé d'autres applications autonomes auparavant et cela ne s'est pas produit.Comment diagnostiquer un Applescript compilé qui se ferme au démarrage?

J'ai essayé de changer le type d'application en un paquet (même problème). J'ai même essayé d'attacher à l'exécutable via gdb pour voir si je pouvais casser quelque chose de magique pour me dire ce qui se passait. J'ai regardé dans la console pour avoir des informations. Rien n'y était. Les scripts rirent au nez.

Comment résoudre ce problème?

J'ai inclus l'un des scripts ci-dessous; la seconde est à peu près la même chose. Je cours 10.5.8.

property userpassword : "" 

if userpassword is "" then 
    display dialog "Please enter your user password:" default answer "" with hidden answer 
    set userpassword to text returned of result 
    set the_password to "Undefined" 
    repeat until the_password is "Correct" 
     try 
      do shell script "/opt/local/sbin/mt-daapd -c /etc/mt-daapd.conf" password userpassword with administrator privileges 
      set the_password to "Correct" 
     on error 
      display dialog "Sorry, the password entered was not correct. Please try again:" default answer "" with hidden answer 
      set userpassword to text returned of result 
     end try 
    end repeat 
    if the_password is "Correct" then 
     display dialog "Your music is being shared!" buttons {"Done"} default button "Done" 
    end if 
end if 

Répondre

1

Je ne sais pas comment cela se passe mais le script est de sauver la valeur de userpassword entre les appels donc une fois qu'il a été défini sur toute valeur, il conserve cette valeur et juste de quitter le programme. J'ai découvert cela après avoir regardé comment j'ai créé mes autres applications autonomes.

+0

En AppleScript régulière, sont enregistrées toutes les variables globales avec le script. –

1

Les propriétés des applescripts ne sont pas figées, elles ressemblent aux propriétés de tout autre objet. Vous pouvez les changer au moment de l'exécution, ou evn d'un autre script. donc si votre script1 était

property potato: "potayto" 
say potato 

et vous avez exécuté un autre script

set potato of script1 to "potahto" 

puis à nouveau en cours d'exécution script1 rendrait votre ordinateur dire "potahto".

Les propriétés peuvent être des moyens utiles de stocker les préférences dans les scripts.

Il suffit de supprimer la première instruction if, elle est redondante quand même. Vérifiez si le mot de passe est correct, plutôt que s'il est vide.

ainsi:

property userpassword :"" 
set the_password to "Undefined" 
repeat until the_password is "Correct" 
    try 
     do shell script "/opt/local/sbin/mt-daapd -c /etc/mt-daapd.conf" password userpassword with administrator privileges 
     set the_password to "Correct" 
    on error 
     display dialog "Sorry, the password was not correct. Please try again:" default answer "" with hidden answer 
     set userpassword to text returned of result 
    end try 
end repeat 
if the_password is "Correct" then 
    display dialog "Your music is being shared!" buttons {"Done"} default button "Done" 
end if 
+1

Vous souhaiterez peut-être étudier les scripts de chaîne de raccourcis pour rendre cette fonction plus sécurisée ou la fonction de ligne de commande "sécurité". – stib

Questions connexes