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/ (Qt グローバル設定を保存する) に com.trolltech.plist ファイルがある場合、Qt 4.8.1 に移行する必要がある場合があります。詳細はこちら: http://qt-project.org/doc/qt-4.8/qsettings.html#ching-the-location-of-global-qt-settings-on-mac-os-x

于 2012-05-30T15:56:26.313 に答える
1

Apple 開発者向けドキュメントでは、ファイルシステムを操作する際に何が許可されるかについて説明しています。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 に答える