2

我有一个提交给 Apple Mac App Store 的 Qt 应用程序。它因写入〜/Library/Preferences/com.mycompany.myapp而被拒绝

这是我收到的消息:

2.30

The application accesses the following location(s):

'~/Library/Preferences/com.nourayn.AlMosaly.plist'

The application may be 

* creating files
* writing files
* opening files for Read/Write access (instead of Read-Only access)

in the above location(s).

如何解决这个问题?

4

2 回答 2

5

我假设您正在使用 QSettings 保存您的应用程序设置。您的代码可能如下所示:

QApplication app;
app.setOrganizationDomain("nourayn.com");
app.setApplicationName("AlMosaly");
QSettings settings; // this creates a .plist file under ~/Library/Preferences
                    // which is non-MacAppStore-friendly

相反,您可以使用明确指定的文件名创建 QSettings:

app.setOrganizationDomain("nourayn.com");
app.setApplicationName("AlMosaly");
QSettings settings(yourAppDataFolder+"/settings.plist", QSettings::NativeFormat);
                    // this writes to the file you specified

如果您在应用程序的多个位置使用 QSettings,这样做可能会稍微简化一些事情:

// in main.cpp
app.setProperty("SettingsFileName", yourAppDataFolder+"/settings.plist");

// in someotherfile.cpp
QString settingsFileName = qApp->property("SettingsFileName").toString();
QSettings settings(settingsFileName, QSettings::NativeFormat);

此外,如果您在 ~/Library/ 中有一个 com.trolltech.plist 文件(存储 Qt 全局设置),您可能需要迁移到 Qt 4.8.1。更多信息在这里:http: //qt-project.org/doc/qt-4.8/qsettings.html#chang-the-location-of-global-qt-settings-on-mac-os-x

于 2012-05-30T15:56:26.313 回答
1

苹果开发者文档解释了使用文件系统时允许的内容。您可以选择使用 API 调用为您处理它,否则您的位置和命名数量有限。在这里详细阅读

Your application may write to the following directories:
~/Library/Application Support/<app-identifier>
~/Library/<app-identifier>
~/Library/Caches/<app-identifier>

如果您使用的是 QSettings,它将选择系统位置来存储首选项,那么您可能需要更改该方法以更直接地控制目标。

对于 QSettings,请阅读有关如何在平台/范围基础上将路径更改为首选位置的文档:http: //qt-project.org/doc/qt-4.8/qsettings.html#setPath

QSettings::setPath(QSettings::IniFormat, QSettings::UserScope, 
                    "/path/to/location");
于 2012-05-30T15:19:53.460 回答