バージョン番号を取得するために、Mac アプリケーションの「Info.plist」を QXmlQuery で解析しようとしています。Info.plist の例を次に示します。
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>13A598</string>
<key>CFBundleShortVersionString</key>
<string>1.4</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.4</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
目的は、「CFBundleShortVersionString」キーを使用して「1.4」値を取得することです。そのために、次のクエリを使用します。
/plist/dict/key[node()='CFBundleShortVersionString']/following-sibling::string[1]/node()
それは完全に機能します。
これを Qt に転置するときは、次のコードを使用します。
QString version;
QString fileName = appPath + "/Contents/Info.plist";
QFile file(fileName);
if (file.open(QIODevice::ReadOnly)) {
QXmlQuery query;
query.bindVariable("file", &file);
query.setQuery("declare variable $file external; doc($file)/plist/dict/key[node()='CFBundleShortVersionString']/following-sibling::string[1]/node()");
query.evaluateTo(&version);
}
return version;
「query.evaluateTo」までは問題なく動作し、しばらくスタックすると、「バージョン」に空の値が返されます。
誰か助けてくれませんか?