Macos 从何处读取.DMG Mac OS文件中的数据文件夹和配置文件?

Macos 从何处读取.DMG Mac OS文件中的数据文件夹和配置文件?,macos,path,installation,configuration-files,Macos,Path,Installation,Configuration Files,我正在为Windows和Mac开发一个应用程序,我需要一些关于如何组织输入数据的文件结构(例如配置文件)的帮助,以便在Mac上轻松使用 下面是我如何为Windows设置它的: 我有一个非常简单的程序,可以从目录data读取一些数据在Windows中,我创建了一个example.exe,而data文件夹就在它旁边。如果用户需要处理更多数据(通过电子邮件接收),只需将其放入文件夹中,然后双击example.exe 以下是我为Mac Os所做的工作: 我设法创建了DMG,但是我不知道数据文件夹放在哪里

我正在为Windows和Mac开发一个应用程序,我需要一些关于如何组织输入数据的文件结构(例如配置文件)的帮助,以便在Mac上轻松使用

下面是我如何为Windows设置它的: 我有一个非常简单的程序,可以从目录
data
读取一些数据在Windows中,我创建了一个
example.exe
,而
data
文件夹就在它旁边
。如果用户需要处理更多数据(通过电子邮件接收),只需将其放入文件夹中,然后双击
example.exe

以下是我为Mac Os所做的工作: 我设法创建了DMG,但是我不知道数据文件夹放在哪里。硬编码另一个文件夹(例如
主页
桌面
)可以工作,但感觉不太对劲。我想用一个按钮打开一个对话框来指定文件夹,但是我需要保存路径,以便用户下次打开应用程序时使用。为了保存此路径,我需要一个配置文件或工作区。所以,我需要一个路径,在那里我可以找到配置文件


Mac可用性的角度来看,预期的行为是什么,在目录位置和配置文件方面,我会怎么做?

我想说,让数据文件夹与macOS中的可执行python脚本同时运行没有什么错

我假设这是一个没有GUI的脚本。如果有GUI,我认为应该鼓励用户将应用程序复制到/Applications(或~/Applications)中,然后为用户提供一种使用对话框选择“数据”文件夹的方法

不过,我认为对Windows和macOS都有效的最佳解决方案是允许将数据目录的路径指定为命令行参数。如果未指定,则可以默认为./data

如果要保存用户指定的数据目录路径设置,一种类似mac的好方法是使用
defaults
系统。您可以使用
defaults read
defaults write
命令轻松地在脚本中读取和写入默认值。使用默认值有助于确保它们在所有应用程序中都是唯一的

假设您的组织名为ttwidgets,如果您有一个名为ttwidgets.com的网站,并且该脚本名为pywidget,那么您将使用域
com.ttwidgets.pywidget

设置默认值的语法为:

% defaults write com.ttwidgets.pywidget datapath /user/specified/path
然后由macOS管理并持久存储。如果设置稍后再次存在,您可以使用以下命令读回该设置:

% defaults read com.ttwidgets.pywidget datapath
/user/specified/path
如果未设置任何内容(例如首次使用),您将得到一个错误(并且该命令返回一个非零返回代码:

% defaults read com.ttwidgets.pywidget an_unset_variable
2018-04-21 12:08:40.179 defaults[12409:1472790]
The domain/default pair of (com.ttwidgets.pywidget, an_unset_variable) does not exist
% echo $?
1

这应该提供使用macOS内置首选方法持久存储应用程序的键/值设置所需的所有工具。

谢谢@drootang。这不是一个可执行的python,我用python编写了我的程序,然后创建了一个DMG(用pyinstaller).t这是一个GUI;我想到了对话框选项,因此用户可以打开任何文件夹,但我希望他们在第一次打开程序时才这样做。通常我会将路径保存在配置文件中;因此,下次用户不必再次选择它,但路径是从配置中读取的,但我最终会遇到同样的问题m:我把配置文件放在哪里?我编辑了我的回复,将macOS
defaults
system的描述包括在内。谢谢你的回答,我仍然很难把所有的部分放在一起,但我确实掌握了这个想法。不过,你给了我一个很好的搜索起点:默认系统。我必须给出一个很好的r对于
默认值
系统,我猜python将提供一个访问此数据的接口。据我所知,默认值仅存储在本地。iCloud可能会进行一些同步,但与此无关。您只需要与本地操作系统交互。您可以组成任何名称/域,但您应该努力选择一些内容对您来说是独一无二的。如果您没有公司,可能是您将要分发它的电子邮件地址?或者github URL被颠倒了?此问题正在讨论中,因为它涉嫌投票欺诈。请不要将此问题上移到“取消”否决票,因为它们可能会被还原。你可以像平常一样自由投票。但是,作为记录,人们可能会否决这个问题,因为它没有显示出太多的研究成果。如果你可以添加一两句话来解释你尝试过的内容以及为什么不起作用,这会有很大帮助——这样,我们就避免给你解决方案你已经知道的投票是不起作用的。(还有,很抱歉有一个混蛋滥用投票系统。我保证我们不都是这样。)