AppleScript:如何将 属性 设置为文件路径?

AppleScript: How do I set a property to a file path?

背景
我正在通过 Xcode 开发 AppleScript 应用程序 (ASOBJ),并经常访问 (update/retrieve) 我创建的 .plist 文件中的各种条目。

每当我需要访问数据时,我都会使用以下命令:

set thePropertyListFilePath to POSIX path of (path to resource "Data.plist")
tell application "System Events"
    tell property list file thePropertyListFilePath
        set myAge to value of property list item "userAge" as text
    end tell
end tell

问题
我的项目正在开发中,文件名/路径变化太频繁了。 我想在我的项目顶部制作一个 property thePropertyListFilePath : [...] 以便能够在一个地方而不是多个地方更改文件的路径和名称。
我想使用 property 而不是 set,因为它在我的情况下效果更好。

在我的代码顶部:
property thePropertyListFilePath : POSIX path of (path to resource "Data.plist")

不编译因为:

Error: Resource not found.

分析
我知道资源 Data.plist 是它应该在的位置并且路径是正确的,因为它在我的顶级代码片段中运行良好。 留给我一个问题:

如何将 属性 设置为文件路径?

如果能深入了解为什么会抛出此错误以及如何将 属性 正确设置为此(相对)文件路径,我们将不胜感激。我知道 ,但它没有提供适用的解决方案。干杯。


编辑
我现在似乎遇到了相关错误:

System Events got an error: 'This Mac:Users:myuser:Library:Developer:Xcode:DerivedData:ProjectName:Build:Products:Debug:ProjectName.app:Contents:Resources:Data.plist' is not a property list file. (error -1728)

在应用程序启动之前需要进行一些验证,所以我在 applicationWillFinishLaunching_ 部分编写了我的代码 - 这应该不会出现任何问题。

我知道文件在那里并且是 .plist 格式所以我认为它可能只是它周围的 tell ... 语句。
以前都是用set currentVersion to (current application's class "NSBundle"'s mainBundle()'s objectForInfoDictionaryKey:"CFBundleShortVersionString") as textInfo.plist中一次性获取版本号的。是否可以在没有 tell 语句的情况下使用类似的单行代码从我自己的 plist 文件中检索 userAge

不要那样做。切勿使用相对路径声明 属性。该值将在编译时设置并且永远不会改变。这使得相对路径的好处变得无用。

将 属性 声明为空字符串

property thePropertyListFilePath : ""

并设置在applicationDidFinishLaunching

on applicationDidFinishLaunching_(aNotification)
   set thePropertyListFilePath to POSIX path of (path to resource "Data.plist")
end applicationWillFinishLaunching_

然而,当您开发 AppleScriptObjC 时,我推荐 Cocoa 方式(更长但更有效)

set thePropertyListFilePath to (current application's NSBundle's mainBundle()'s pathForResource_ofType_("Data", "plist")) as text