2012-05-30 53 views
2

我有一个提交给Apple Mac App Store的Qt应用程序。它已经拒绝写入〜/库/首选项/ com.mycompany.myappQt Mac App Store应用程序拒绝接收文件系统请求

这里是我收到的消息:

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). 

如何解决这一问题?

回答

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); 

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

+0

我在很多独立的地方使用QSettings,我可以使用一个Api调用来设置设置位置,而不是在QSettings构造函数中设置每个QSettings对象我创造? –

+0

编辑我的答案来解决这个问题。你也可以检查QSettings :: setPath()作为@jdi建议,但我没有尝试过使用它。 – roop

1

苹果开发者文档解释了在使用文件系统时允许的内容。您可以选择使用API​​调用来处理它,否则您的位置和名称数量有限。 Read in detail here

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"); 
+0

我知道这已经:) 我希望有一个简单的方法来强制QSettings使用任意位置 –

+0

@AhmedSaid:本文档介绍了如何设置路径的平台和范围是:http:/ /qt-project.org/doc/qt-4.8/qsettings.html#setPath – jdi

相关问题