如何诊断刚刚在启动时退出的已编译的Applescript?

时间:2010-01-07 13:50:00

标签: applescript

我写了两个苹果脚本,以便我的妻子可以启动mt-daapd并轻松关闭它。它们在脚本编辑器应用程序中运行良好,但当我将它们编译成独立的应用程序时,应用程序在我第一次测试它们时工作。然后他们让我难堪,因为我自豪地把它们展示给我的妻子。我看到“开放”的动画,然后他们就坐在那里。我以前创建了其他独立应用程序,但事实并非如此。

我尝试将应用类型更改为捆绑(同样的问题)。我甚至尝试通过gdb附加到可执行文件,看看我是否可以打破魔法来告诉我发生了什么。我查看了控制台中的一些信息。什么都没有。脚本在我脸上笑了起来。

如何解决此问题?

我已经包含了下面的一个脚本;第二个几乎是一样的。我正在运行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

2 个答案:

答案 0 :(得分:1)

我不确定这是怎么回事,但是脚本在调用之间保存userpassword的值,所以一旦它被设置为任何值,它就会保留该值并退出程序。在看了我如何创建其他独立应用程序后,我发现了这一点。

答案 1 :(得分:1)

AppleScript中的

属性不是固定的,它们就像任何其他对象的属性一样。您可以在运行时更改它们,也可以从其他脚本更改它们。所以如果你的script1是

property potato: "potayto"
say potato

并且您运行了另一个脚本

set potato of script1 to "potahto"

然后再次运行script1会让你的电脑说“potahto”。

属性可以是在脚本中存储首选项的有用方法。

只需删除第一个if语句,无论如何都是多余的。检查密码是否正确,而不是密码是否为空。

因此:

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